基于MonoBehavior的单例模式
适用于需要挂载到游戏物体上的脚本对象。 类似的,使用Awake函数在游戏运行开始时对单例进行初始化,挂载到游戏物体上的脚本对象生命周期与游戏对象一致,所以用饿汉式即可,实例化放到Awake中的原因是子类继承mono单例是会自动拥有Awake并执行完成实例,效果和放在变量进行初始化一样,注意如果mono单例对Awake进行重写必须要base.awake完成实例化,可以参考GameRoot的实现。
public abstract class SingletonMono<T> : MonoBehaviour where T : SingletonMono<T>
{
public static T Instance;
private T(){}
protected virtual void Awake()
{
if (Instance == null)
{
Instance = this as T;
}
}
}