Unity 单例基类
不继承mono
不需要挂载到游戏对象上
public class SingletonBase<T> where T : SingletonBase<T>, new () {
private static T instance;
public static T Instance {
get {
if (instance == null) {
instance = new T ();
instance.Init ();
}
return instance;
}
}
public virtual void Init () { }
}
继承mono
需要挂载 (运行时自动挂载)
using UnityEngine;
public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T> {
private static T instance;
public static T Instance {
get {
if (instance == null) {
// 在场景中更具类型查找引用
instance = FindObjectOfType<T> ();
if (instance == null) {
// GameObject managerGo = new GameObject (typeof (T).Name);
var managerGo = GameObject.Find ("MgrRoots");
if (managerGo == null)
managerGo = new GameObject ("MgrRoots");
instance = managerGo.AddComponent<T> ();
}
instance.Init ();
}
return instance;
}
}
public virtual void Init () { }
}
所有继承后的单例脚本第一次调用后,都会被挂载到MgrRoots这个运行时才创建出来的对象上
简化写法
using UnityEngine;
public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T> {
public static readonly T Instance = new GameObject (typeof (T).Name).AddComponent<T> ();
}
最后
学习笔记,仅供参考,如有不正,欢迎指正