内容
基于Unity 的MonoBehaviour
类实现的单例类
核心需求
using UnityEngine;
namespace Tools {
public abstract class SingletonMonoBehaviour<T> : MonoBehaviour where T : SingletonMonoBehaviour<T> {
static T instance;
public static T Instance {
get {
if (instance == null) {
instance = FindObjectOfType<T>();
if (instance == null) {
GameObject go = new GameObject {
name = typeof(T).Name
};
instance = go.AddComponent<T>();
}
}
return instance;
}
}
protected virtual void Awake() {
if (instance == null) {
instance = this as T;
DontDestroyOnLoad(this.gameObject);
}
else if (instance != this) {
Destroy(gameObject);
}
}
public virtual void OnDestroy() {
if (instance == this) {
instance = null;
}
}
}
}