using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class MonoSingleton : MonoBehaviour where T : Component { private static T s_instance; public static T sIntance { get { return s_instance; } } protected virtual void Awake() { if ((MonoSingleton.s_instance != null) && (MonoSingleton.s_instance.gameObject != gameObject)) { if (Application.isPlaying) { UnityEngine.Object.Destroy(gameObject); } else { UnityEngine.Object.DestroyImmediate(gameObject); } } else if (MonoSingleton.s_instance == null) { MonoSingleton.s_instance = GetComponent(); } UnityEngine.Object.DontDestroyOnLoad(gameObject); Init(); } public static void DestroyInstance() { if (MonoSingleton.s_instance != null) { UnityEngine.Object.Destroy(MonoSingleton.s_instance.gameObject); } MonoSingleton.s_instance = null; } public static T GetInstance() { if ((MonoSingleton.s_instance == null)) { Type type = typeof(T); MonoSingleton.s_instance = (T)UnityEngine.Object.FindObjectOfType(type); if (MonoSingleton.s_instance == null) { GameObject obj2 = new GameObject(typeof(T).Name); MonoSingleton.s_instance = obj2.AddComponent(); GameObject obj3 = GameObject.Find("BootObj"); if (obj3 != null) { obj2.transform.SetParent(obj3.transform); } } } return MonoSingleton.s_instance; } public static bool HasInstance() { return (MonoSingleton.s_instance != null); } protected virtual void Init() { } protected virtual void OnDestroy() { if ((MonoSingleton.s_instance != null) && (MonoSingleton.s_instance.gameObject == gameObject)) { MonoSingleton.s_instance = null; } } }