Unity C# 单例模式:MonoSingleton<T> 实现
public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
// T 表示子类类型
// 单例实例
private static T instance;
public static T Instance
{
get
{
if (instance == null)
{
// 在场景中根据类型查找引用
instance = FindObjectOfType<T>();
if (instance == null)
{
// 创建脚本对象(立即执行Awake)
new GameObject('Singleton of ' + typeof(T)).AddComponent<T>();
}
else
{
instance.Init();
}
}
return instance;
}
}
// 在 Awake 方法中初始化单例
protected void Awake()
{
if (instance == null)
{
instance = this as T;
Init();
}
}
// 初始化方法,可被子类覆写
public virtual void Init()
{
// 子类可在这里进行额外的初始化操作
}
}
注释:
MonoSingleton<T>是一个泛型类,用于实现单例模式的 MonoBehavior 类。T表示子类的类型,限定子类必须是MonoSingleton<T>的派生类。private static T instance是单例实例变量。public static T Instance是获取单例实例的静态属性。Awake方法在脚本对象被创建时调用,用于初始化单例。Init方法是一个虚方法,可被子类覆写,用于完成额外的初始化操作。
原文地址: https://www.cveoy.top/t/topic/nBy 著作权归作者所有。请勿转载和采集!