【Unity】基于MonoBehaviour类实现的单例类

内容

基于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;
            }
        }
    }
}
posted @ 2023-06-30 11:07  星空探险家  阅读(29)  评论(0)    收藏  举报  来源