using System.Collections.Generic; using UnityEngine; namespace Mirror.Discovery { [DisallowMultipleComponent] [AddComponentMenu("Network/NetworkDiscoveryHUD")] [HelpURL("https://mirror-networking.com/docs/Components/NetworkDiscovery.html")] [RequireComponent(typeof(NetworkDiscovery))] public class NetworkDiscoveryHUD : MonoBehaviour { readonly Dictionary discoveredServers = new Dictionary(); Vector2 scrollViewPos = Vector2.zero; public NetworkDiscovery networkDiscovery; #if UNITY_EDITOR void OnValidate() { if (networkDiscovery == null) { networkDiscovery = GetComponent(); UnityEditor.Events.UnityEventTools.AddPersistentListener(networkDiscovery.OnServerFound, OnDiscoveredServer); UnityEditor.Undo.RecordObjects(new Object[] { this, networkDiscovery }, "Set NetworkDiscovery"); } } #endif void OnGUI() { if (NetworkManager.singleton == null) return; if (NetworkServer.active || NetworkClient.active) return; if (!NetworkClient.isConnected && !NetworkServer.active && !NetworkClient.active) DrawGUI(); } void DrawGUI() { GUILayout.BeginHorizontal(); if (GUILayout.Button("Find Servers")) { discoveredServers.Clear(); networkDiscovery.StartDiscovery(); } // LAN Host if (GUILayout.Button("Start Host")) { discoveredServers.Clear(); NetworkManager.singleton.StartHost(); networkDiscovery.AdvertiseServer(); } // Dedicated server if (GUILayout.Button("Start Server")) { discoveredServers.Clear(); NetworkManager.singleton.StartServer(); networkDiscovery.AdvertiseServer(); } GUILayout.EndHorizontal(); // show list of found server GUILayout.Label($"Discovered Servers [{discoveredServers.Count}]:"); // servers scrollViewPos = GUILayout.BeginScrollView(scrollViewPos); foreach (ServerResponse info in discoveredServers.Values) if (GUILayout.Button(info.EndPoint.Address.ToString())) Connect(info); GUILayout.EndScrollView(); } void Connect(ServerResponse info) { NetworkManager.singleton.StartClient(info.uri); } public void OnDiscoveredServer(ServerResponse info) { // Note that you can check the versioning to decide if you can connect to the server or not using this method discoveredServers[info.serverId] = info; } } }