using System; using UnityEngine; namespace CIS { public class SingletonMonoBehaviourClass : MonoBehaviour where T : UnityEngine.Object, new() { public static T instance { get { if (SingletonMonoBehaviourClass.s_Instance == null) { SingletonMonoBehaviourClass.s_Instance = (UnityEngine.Object.FindObjectOfType(typeof(T)) as T); } if (SingletonMonoBehaviourClass.s_Instance == null) { GameObject gameObject = new GameObject(typeof(T).ToString()); SingletonMonoBehaviourClass.s_Instance = (gameObject.AddComponent(typeof(T)) as T); } return SingletonMonoBehaviourClass.s_Instance; } } public static void Release() { if (SingletonMonoBehaviourClass.s_Instance != null) { MonoBehaviour monoBehaviour = SingletonMonoBehaviourClass.s_Instance as MonoBehaviour; UnityEngine.Object.Destroy(monoBehaviour.gameObject); SingletonMonoBehaviourClass.s_Instance = (T)((object)null); } } protected virtual void OnApplicationQuit() { SingletonMonoBehaviourClass.s_Instance = (T)((object)null); } private static T s_Instance; } }