From c7961167589978a04c1a205b2595f6d6b3759050 Mon Sep 17 00:00:00 2001 From: MrGadget Date: Tue, 24 Mar 2020 16:55:18 -0400 Subject: [PATCH] Remove Usage of LAN in HUD and Docs (#1592) * Remove usage of LAN in HUD and docs * Server + Client * Host (Server + Client) * HUD Image --- .../Mirror/Examples/AdditiveScenes/README.md | 8 ++++---- Assets/Mirror/Examples/Basic/README.md | 6 +++--- Assets/Mirror/Examples/Room/README.md | 4 ++-- Assets/Mirror/Runtime/NetworkManagerHUD.cs | 12 ++++++------ doc/Components/NetworkManagerHUD.md | 18 +++++++++--------- doc/Components/NetworkManagerHUDUI.png | Bin 4707 -> 4911 bytes doc/Examples/Pong/index.md | 4 ++-- doc/index.md | 2 +- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Assets/Mirror/Examples/AdditiveScenes/README.md b/Assets/Mirror/Examples/AdditiveScenes/README.md index 6c708c27e..032acd15b 100644 --- a/Assets/Mirror/Examples/AdditiveScenes/README.md +++ b/Assets/Mirror/Examples/AdditiveScenes/README.md @@ -1,4 +1,4 @@ -# Additive Scenes Example +# Additive Scenes Example IMPORTANT: Make sure you have a layer in project settings called Player for this example to work well. @@ -12,10 +12,10 @@ File -> Build and Run Start up to 3 built instances: These will all be client players. -Press Play in the Editor and click LAN Host in the editor -- This will be the host and the 1st player of up to 4. You can also use LAN Server if you prefer. +Press Play in the Editor and click Host (Server + Client) in the HUD +- This will be the host and the 1st player of up to 4. You can also use Server Only if you prefer. -Click LAN Client in the built instances. +Click Client in the built instances. - WASDQE keys to move & turn your player capsule. - There are objects in the corners of the scene hidden by Proximity Checkers. - The big area in the middle is where the subscene will be loaded when you get near the shelter. diff --git a/Assets/Mirror/Examples/Basic/README.md b/Assets/Mirror/Examples/Basic/README.md index 3bde05527..5b39b3aa6 100644 --- a/Assets/Mirror/Examples/Basic/README.md +++ b/Assets/Mirror/Examples/Basic/README.md @@ -6,11 +6,11 @@ This is a bare bones example of a running game with Network Manager and UI prefa 2. Open the Example scene and build the project. -3. In the editor, click Play, and LAN Host or LAN Server...it will be listening on port 7777. - - If you clicked LAN Host, the host player will appear as Player 00. +3. In the editor, click Play, and Server + Client or Server Only...it will be listening on port 7777. + - If you clicked Host (Server + Client), the host player will appear as Player 00. 4. Run one or more instances (up to 16 total players) of the built application. -5. Click LAN Client on each instance. +5. Click Client on each instance. 6. Now you will see all players in the editor and the clients, all with data being updated and synchronized. diff --git a/Assets/Mirror/Examples/Room/README.md b/Assets/Mirror/Examples/Room/README.md index 3bdffd982..178051461 100644 --- a/Assets/Mirror/Examples/Room/README.md +++ b/Assets/Mirror/Examples/Room/README.md @@ -13,9 +13,9 @@ Start up to 4 built instances: These will all be client players. Open the Offline scene in the Editor and press Play -Click LAN Host in the editor: This will be host and the 5th player. You can also use LAN Server if you prefer. +Click Host (Server + Client) in the HUD: This will be host and the 5th player. You can also use Server Only if you prefer. -Click LAN Client in the built instances. +Click Client in the built instances. Click Ready in each instance, and finally in the Editor (Host). diff --git a/Assets/Mirror/Runtime/NetworkManagerHUD.cs b/Assets/Mirror/Runtime/NetworkManagerHUD.cs index 76fb6faa5..527b9d409 100644 --- a/Assets/Mirror/Runtime/NetworkManagerHUD.cs +++ b/Assets/Mirror/Runtime/NetworkManagerHUD.cs @@ -47,25 +47,25 @@ void OnGUI() { if (!NetworkClient.active) { - // LAN Host + // Server + Client if (Application.platform != RuntimePlatform.WebGLPlayer) { - if (GUILayout.Button("LAN Host")) + if (GUILayout.Button("Host (Server + Client)")) { manager.StartHost(); } } - // LAN Client + IP + // Client + IP GUILayout.BeginHorizontal(); - if (GUILayout.Button("LAN Client")) + if (GUILayout.Button("Client")) { manager.StartClient(); } manager.networkAddress = GUILayout.TextField(manager.networkAddress); GUILayout.EndHorizontal(); - // LAN Server Only + // Server Only if (Application.platform == RuntimePlatform.WebGLPlayer) { // cant be a server in webgl build @@ -73,7 +73,7 @@ void OnGUI() } else { - if (GUILayout.Button("LAN Server Only")) manager.StartServer(); + if (GUILayout.Button("Server Only")) manager.StartServer(); } } else diff --git a/doc/Components/NetworkManagerHUD.md b/doc/Components/NetworkManagerHUD.md index bd519b5a1..a17b45aec 100644 --- a/doc/Components/NetworkManagerHUD.md +++ b/doc/Components/NetworkManagerHUD.md @@ -20,11 +20,11 @@ The Network Manager HUD provides the basic functions so that people playing your ## Using the HUD -The Network Manager HUD starts in LAN Host mode, and displays buttons relating to hosting and joining a multiplayer game. +The Network Manager HUD starts in Server + Client mode, and displays buttons relating to hosting and joining a multiplayer game. -### LAN Host +### Host (Server + Client) -Click the LAN Host button to start a game as a host on the local network. This client is both the host *and* one of the players in the game. It uses the information from the Network Info section in the inspector to host the game. +Click the Host (Server + Client) button to start a game as a host on the local network. This client is both the host *and* one of the players in the game. It uses the information from the Network Info section in the inspector to host the game. When you click this button, the HUD switches to a simple display of network details, and a Stop button which allows you to stop hosting the game and return to the main HUD menu. @@ -34,19 +34,19 @@ When you have started a game as a host, other players of the game can then conne Click the Stop button to disconnect from the host. Clicking Stop also returns to the main HUD menu. -### LAN Client +### Client -To connect to a host on the internet use the text field to the right of the LAN Client button to specify the address of the host. The default host address is “localhost”, which means the client looks on its own computer for the game host. In addition to *localhost*, you can specify an IPv4 address, and IPv6 address, or a fully-qualified domain name (FQDN), e.g. *game.example.com*, and the transport with resolve the name using DNS. Click LAN Client to attempt to connect to the host address you have specified. +To connect to a host on the internet use the text field to the right of the Client button to specify the address of the host. The default host address is “localhost”, which means the client looks on its own computer for the game host. In addition to *localhost*, you can specify an IPv4 address, and IPv6 address, or a fully-qualified domain name (FQDN), e.g. *game.example.com*, and the transport with resolve the name using DNS. Click Client to attempt to connect to the host address you have specified. Use the default “localhost” in this field if you are running multiple instances of your game on one computer, to test multiplayer interactivity. To do this, you can create a standalone build of your game, and then launch it multiple times on your computer. This is a common way to quickly test that your networked game interactions are functioning as you expect, without you needing to deploy your game to multiple computers or devices. -![An example of three instances of a networked game running on the same desktop PC. This is useful for quick tests to ensure networked interactions are behaving as you intended. One is running as LAN Host, and two are running as LAN Client.](NetworkGame3Instances.jpg) +![An example of three instances of a networked game running on the same desktop PC. This is useful for quick tests to ensure networked interactions are behaving as you intended. One is running as Host, and two are running as Client.](NetworkGame3Instances.jpg) When you want to test your game on multiple machines you need to put the address of the computer acting as host into the address text field. The computer acting as the host needs to tell their IP address to everyone running clients, so that you can type this into the box. For local clients on a LAN, that's the local IP address. For remote clients, that's the WAN IP address of the router of the host. Firewall rules and port-forwarding are generally required for a computer to act as host and accept connections from other computers, whether they're on the LAN or the internet. -Enter the IP address (or leave it as “localhost” if you are testing it on your own machine), then click LAN Client to attempt to connect to the host. +Enter the IP address (or leave it as “localhost” if you are testing it on your own machine), then click Client to attempt to connect to the host. When the client is attempting to connect, the HUD displays a Cancel Connection Attempt button. Click this if you want to stop trying to connect to the host. @@ -56,9 +56,9 @@ If the connection is successful, the HUD displays the Stop button. Click this if ![The HUD GUI after a successful connection](NetworkManagerHUDConnected.png) -### LAN Server Only +### Server Only -Click LAN Server Only to start a game which acts as a server that other clients can connect to, but which does not act as a client to the game itself. This type of game is often called a “dedicated server”. A user cannot play the game on this particular instance of your game. All players must connect as clients, and nobody plays on the instance that is running as the server. +Click Server Only to start a game which acts as a server that other clients can connect to, but which does not act as a client to the game itself. This type of game is often called a “dedicated server”. A user cannot play the game on this particular instance of your game. All players must connect as clients, and nobody plays on the instance that is running as the server. A dedicated server results in better performance for all connected players, because the server doesn’t need to process a local player’s game play in addition to acting as server. diff --git a/doc/Components/NetworkManagerHUDUI.png b/doc/Components/NetworkManagerHUDUI.png index 5d98c3850d1f10d48d70b086bef4543d197a98c0..b2a50d91b6491e620b492b5fa8feca4f7043c4da 100644 GIT binary patch literal 4911 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 lUlI3za_(>Ik?n2}SLOhCIIH`q0>ef`X~zZ=>vX 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 ZMt09S5SoZE^1~2?2K