using System; using UnityEngine; public class SingletonMono : BaseBehaviour where T : MonoBehaviour { protected SingletonMono() { } public static T Instance { get { if (SingletonMono.ApplicationIsQuitting) { UnityEngine.Debug.LogWarning("[Singleton] Instance '" + typeof(T) + "' already destroyed on application quit. Won't create again - returning null."); return (T)((object)null); } object @lock = SingletonMono.Lock; lock (@lock) { if (SingletonMono._instance == null) { SingletonMono._instance = UnityEngine.Object.FindObjectOfType(); } } return SingletonMono._instance; } } protected virtual void OnDestroy() { SingletonMono.ApplicationIsQuitting = true; } public static bool IsValid() { return SingletonMono._instance != null; } private static T _instance; private static readonly object Lock = new object(); public static bool ApplicationIsQuitting = false; }