123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using System;
- using UnityEngine;
- /// <summary>
- /// 单键类
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
- {
- /// <summary>
- /// 单键
- /// </summary>
- private static T m_Instance;
- /// <summary>
- /// 单键
- /// </summary>
- public static T Instance
- {
- get
- {
- if (object.ReferenceEquals(MonoSingleton<T>.m_Instance, null))
- {
- GameObject obj = new GameObject(typeof(T).ToString());
- obj.transform.parent = Container.transform;
- MonoSingleton<T>.m_Instance = obj.AddComponent<T>();
- }
- return MonoSingleton<T>.m_Instance;
- }
- }
- static GameObject _mC;
- static GameObject Container
- {
- get
- {
- if (null == _mC)
- {
- _mC = GameObject.Find("MonoSingleton");
- }
- if (null == _mC)
- {
- _mC = new GameObject("MonoSingleton");
- DontDestroyOnLoad(_mC);
- }
- return _mC;
- }
- }
- /// <summary>
- /// 单键是否有效
- /// </summary>
- public static bool IsInstanceValid
- {
- get
- {
- return !object.ReferenceEquals(MonoSingleton<T>.m_Instance, null);
- }
- }
- /// <summary>
- /// 初始化
- /// </summary>
- private void Awake()
- {
- if (object.ReferenceEquals(MonoSingleton<T>.m_Instance, null))
- {
- MonoSingleton<T>.m_Instance = (this as T);
- MonoSingleton<T>.m_Instance.OnAwake();
- }
- }
- /// <summary>
- /// 初始化
- /// </summary>
- protected virtual void OnAwake()
- {
- }
- /// <summary>
- /// 销毁
- /// </summary>
- protected virtual void DoOnDestroy()
- {
- }
- /// <summary>
- /// 销毁
- /// </summary>
- private void OnDestroy()
- {
- this.DoOnDestroy();
- if (object.ReferenceEquals(MonoSingleton<T>.m_Instance, this))
- {
- MonoSingleton<T>.m_Instance = (T)((object)null);
- }
- }
- }
|