using UnityEngine;
/// <summary>
///
/// * Writer:June
///
/// * Data:2021.12.20
///
/// * Function:普通泛型单例
///
/// * Remarks:
///
/// </summary>
public abstract class Singleton<T> where T : new()
{
private static T instance;
private static object mutex = new object();
public static T Instance
{
get
{
if (instance == null)
{
//确保单例线程安全
lock (mutex)
{
if (instance == null) instance = new T();
}
}
return instance;
}
}
}
/// <summary>
///
/// * Function:Unity泛型单例
///
/// * Remarks:
///
/// </summary>
public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
private static T instance;
/// <summary>
/// 是否初始化完成
/// </summary>
public static bool IsInitialize { get; private set; }
public static T Instance
{
get
{
//判断是否为空
if (!instance)
{
instance = FindObjectOfType(typeof(T)) as T;
if (!instance)
{
instance = new GameObject("_" + typeof(T).Name).AddComponent<T>();
}
if (!instance)
Debug.LogError("创建单例:" + typeof(T).FullName + "失败!");
}
IsInitialize = true;
instance.InitializeCallBack();
return instance;
}
}
protected virtual void Awake() { }
/// <summary>
/// 退出时释放单例
/// </summary>
protected virtual void OnApplicationQuit()
{
if (instance) instance = null;
}
/// <summary>
/// 初始化后的回调
/// </summary>
public virtual void InitializeCallBack() { }
}
Unity 泛型单例
最新推荐文章于 2024-09-02 17:31:14 发布