// vis2k: GUILayout instead of spacey += ...; removed Update hotkeys to avoid // confusion if someone accidentally presses one. using UnityEngine; namespace Mirror { /// Shows NetworkManager controls in a GUI at runtime. [DisallowMultipleComponent] [AddComponentMenu("Network/Network Manager HUD")] [RequireComponent(typeof(NetworkManager))] [HelpURL("https://mirror-networking.gitbook.io/docs/components/network-manager-hud")] public class NetworkManagerHUD : MonoBehaviour { NetworkManager manager; public int offsetX; public int offsetY; void Awake() { manager = GetComponent(); } void OnGUI() { GUILayout.BeginArea(new Rect(10 + offsetX, 40 + offsetY, 215, 9999)); if (!NetworkClient.isConnected && !NetworkServer.active) { StartButtons(); } else { StatusLabels(); } // client ready if (NetworkClient.isConnected && !NetworkClient.ready) { if (GUILayout.Button("Client Ready")) { NetworkClient.Ready(); if (NetworkClient.localPlayer == null) { NetworkClient.AddPlayer(); } } } StopButtons(); GUILayout.EndArea(); } void StartButtons() { if (!NetworkClient.active) { // Server + Client if (Application.platform != RuntimePlatform.WebGLPlayer) { if (GUILayout.Button("Host (Server + Client)")) { manager.StartHost(); } } // Client + IP GUILayout.BeginHorizontal(); if (GUILayout.Button("Client")) { manager.StartClient(); } // This updates networkAddress every frame from the TextField manager.networkAddress = GUILayout.TextField(manager.networkAddress); GUILayout.EndHorizontal(); // Server Only if (Application.platform == RuntimePlatform.WebGLPlayer) { // cant be a server in webgl build GUILayout.Box("( WebGL cannot be server )"); } else { if (GUILayout.Button("Server Only")) manager.StartServer(); } } else { // Connecting GUILayout.Label($"Connecting to {manager.networkAddress}.."); if (GUILayout.Button("Cancel Connection Attempt")) { manager.StopClient(); } } } void StatusLabels() { // host mode // display separately because this always confused people: // Server: ... // Client: ... if (NetworkServer.active && NetworkClient.active) { GUILayout.Label($"Host: running via {Transport.activeTransport}"); } // server only else if (NetworkServer.active) { GUILayout.Label($"Server: running via {Transport.activeTransport}"); } // client only else if (NetworkClient.isConnected) { GUILayout.Label($"Client: connected to {manager.networkAddress} via {Transport.activeTransport}"); } } void StopButtons() { // stop host if host mode if (NetworkServer.active && NetworkClient.isConnected) { if (GUILayout.Button("Stop Host")) { manager.StopHost(); } } // stop client if client-only else if (NetworkClient.isConnected) { if (GUILayout.Button("Stop Client")) { manager.StopClient(); } } // stop server if server-only else if (NetworkServer.active) { if (GUILayout.Button("Stop Server")) { manager.StopServer(); } } } } }