Petition-to-the-Gods-V3/Assets/Scripts/PersistentNetworkManager.cs
2025-11-18 14:54:11 +08:00

89 lines
2.0 KiB
C#

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<NetworkManager>();
if (networkManager != null)
{
// 確保 NetworkManager 也設置為不銷毀
networkManager.dontDestroyOnLoad = true;
}
Debug.Log("NetworkManager 已設置為跨場景保持");
}
else
{
// 如果已經存在實例,銷毀這個重複的
Debug.Log("NetworkManager 已存在,銷毀重複物件");
Destroy(gameObject);
}
}
/// <summary>
/// 獲取 NetworkManager 實例
/// </summary>
public static NetworkManager GetNetworkManager()
{
if (instance != null)
{
return instance.networkManager;
}
return null;
}
/// <summary>
/// 檢查是否已連線
/// </summary>
public static bool IsConnected()
{
return NetworkClient.isConnected;
}
/// <summary>
/// 檢查是否為 Server
/// </summary>
public static bool IsServer()
{
return NetworkServer.active;
}
/// <summary>
/// 清理連線(當需要完全重置時使用)
/// </summary>
public static void CleanupConnections()
{
if (NetworkServer.active)
{
NetworkManager.singleton.StopServer();
}
if (NetworkClient.isConnected)
{
NetworkManager.singleton.StopClient();
}
}
}