using FishNet; using FishNet.Discovery; using System.Collections; using System.Collections.Generic; using System.Net; using TMPro; using UnityEngine; using UnityEngine.UI; public class NetworkMenuUI : MonoBehaviour { [Header("UI References")] public Button startPlayingButton; public Button joinMultiplayerButton; public Transform serverListContainer; public GameObject serverListItemPrefab; public TMP_Text statusText; [Header("Networking")] public NetworkDiscovery networkDiscovery; public Camera uiCamera; // Optional, disable if connecting private readonly List foundServers = new(); private void Start() { if (networkDiscovery == null) networkDiscovery = FindObjectOfType(); startPlayingButton.onClick.AddListener(OnStartPlaying); joinMultiplayerButton.onClick.AddListener(OnJoinMultiplayer); networkDiscovery.ServerFoundCallback += OnServerFound; } private void OnStartPlaying() { statusText.text = "Starting host..."; StartCoroutine(HostAndSearchRoutine()); } private void OnJoinMultiplayer() { statusText.text = "Searching for servers..."; ClearServerList(); foundServers.Clear(); networkDiscovery.StartSearchingForServers(); } private void OnServerFound(IPEndPoint endPoint) { if (foundServers.Contains(endPoint)) return; foundServers.Add(endPoint); // Auto-join if started as host if (InstanceFinder.IsServer) { //networkDiscovery.StopAdvertisingServer(); networkDiscovery.StopSearchingForServers(); uiCamera.enabled = false; InstanceFinder.ClientManager.StartConnection("192.168.42.212"); statusText.text = $"Joined server: {endPoint.Address}"; return; } // Display in UI for manual joining GameObject item = Instantiate(serverListItemPrefab, serverListContainer); TMP_Text label = item.GetComponentInChildren(); label.text = endPoint.Address.ToString(); Button btn = item.GetComponent