using UnityEngine; using Unity.Netcode; using Unity.Netcode.Transports.UTP; namespace Colosseum.UI { /// /// 네트워크 연결 설정 (Inspector에서 제어) /// public class ConnectionUI : MonoBehaviour { [Header("Connection Settings")] [SerializeField] private string ipAddress = "127.0.0.1"; [SerializeField] private ushort port = 7777; [Header("Editor Test")] [Tooltip("에디터 Play Mode 진입 시 자동으로 Host를 시작합니다")] [SerializeField] private bool autoStartHostInEditor = false; [Header("Status (Read Only)")] [SerializeField, Tooltip("현재 연결 상태")] private string connectionStatus = "Disconnected"; private UnityTransport transport; private void Awake() { transport = NetworkManager.Singleton?.GetComponent(); } private void Start() { UpdateTransportSettings(); #if UNITY_EDITOR if (autoStartHostInEditor && NetworkManager.Singleton != null && !NetworkManager.Singleton.IsListening) { StartHost(); } #endif } private void Update() { UpdateConnectionStatus(); } private void UpdateConnectionStatus() { if (NetworkManager.Singleton == null) { connectionStatus = "No NetworkManager"; return; } if (NetworkManager.Singleton.IsServer && NetworkManager.Singleton.IsHost) connectionStatus = "Host"; else if (NetworkManager.Singleton.IsServer) connectionStatus = "Server"; else if (NetworkManager.Singleton.IsClient) connectionStatus = NetworkManager.Singleton.IsConnectedClient ? "Connected" : "Connecting..."; else connectionStatus = "Disconnected"; } public void StartHost() { UpdateTransportSettings(); NetworkManager.Singleton.StartHost(); Debug.Log("[Network] Started as Host"); } public void StartClient() { UpdateTransportSettings(); NetworkManager.Singleton.StartClient(); Debug.Log($"[Network] Connecting to {ipAddress}:{port}..."); } public void StartServer() { UpdateTransportSettings(); NetworkManager.Singleton.StartServer(); Debug.Log("[Network] Started as Server"); } public void Disconnect() { if (NetworkManager.Singleton != null) { NetworkManager.Singleton.Shutdown(); Debug.Log("[Network] Disconnected"); } } private void UpdateTransportSettings() { if (transport != null) { transport.SetConnectionData(ipAddress, port); } } private void OnValidate() { if (Application.isPlaying && transport != null) { UpdateTransportSettings(); } } } }