using UnityEngine; using Mirror; public class PersistentNetworkManager : MonoBehaviour { private static PersistentNetworkManager instance; private NetworkManager networkManager; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { } // Update is called once per frame void Update() { } private void Awake() { // 單例模式:確保只有一個 NetworkManager 存在 if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); networkManager = GetComponent(); if (networkManager != null) { // 確保 NetworkManager 也設置為不銷毀 networkManager.dontDestroyOnLoad = true; } Debug.Log("NetworkManager 已設置為跨場景保持"); } else { // 如果已經存在實例,銷毀這個重複的 Debug.Log("NetworkManager 已存在,銷毀重複物件"); Destroy(gameObject); } } /// /// 獲取 NetworkManager 實例 /// public static NetworkManager GetNetworkManager() { if (instance != null) { return instance.networkManager; } return null; } /// /// 檢查是否已連線 /// public static bool IsConnected() { return NetworkClient.isConnected; } /// /// 檢查是否為 Server /// public static bool IsServer() { return NetworkServer.active; } /// /// 清理連線(當需要完全重置時使用) /// public static void CleanupConnections() { if (NetworkServer.active) { NetworkManager.singleton.StopServer(); } if (NetworkClient.isConnected) { NetworkManager.singleton.StopClient(); } } }