89 lines
2.0 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|