OvertakingLegend/Assets/Script/Tool/Singleton/MBSingletonManager.cs

53 lines
1.4 KiB
C#
Raw Permalink Normal View History

2025-03-24 03:08:22 +00:00
using UnityEngine;
public class MBSingletonManager<T> : MonoBehaviour where T : MonoBehaviour
{
/// <summary>
/// <20>洢Ψһʵ<D2BB><CAB5><EFBFBD><EFBFBD>˽<EFBFBD>о<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
/// </summary>
private static T instance;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
/// </summary>
private static readonly object mlock = new object();
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>ʵ<EFBFBD><CAB5>
/// </summary>
public static T Instance
{
get
{
// ʹ<><CAB9><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>̰߳<DFB3>ȫ
lock (mlock)
{
if (instance == null)//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ϊ<EFBFBD><CEAA>,<2C><>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ʵ<EFBFBD><CAB5>
{
instance = FindObjectOfType<T>();
if (instance == null)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD>ʵ<EFBFBD><CAB5>,<2C>򴴽<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>
{
GameObject singletonObject = new GameObject(typeof(T).Name);
instance = singletonObject.AddComponent<T>();
}
DontDestroyOnLoad(instance); //<2F><><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>л<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return instance;
}
}
}
/// <summary>
/// <20>ͷŵ<CDB7><C5B5><EFBFBD>
/// </summary>
public virtual void ReleaseInstance()
{
if (instance != null)
{
Destroy(instance.gameObject);
instance = null; // <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
}
}
}