using System.Collections; using System.Collections.Generic; using UnityEngine; public class MonoSingleton : MonoBehaviour where T : MonoSingleton { private static T instance; private static object locker = new object(); // public static T Instance // { // get // { // return instance; // } // } public static T Instance { get { if (instance == null) { lock (locker) { instance = FindObjectOfType(); if (FindObjectsOfType().Length > 1) { #if UNITY_EDITOR Debug.LogError($"{typeof(T)} 不应该存在多个单例!"); #endif return instance; } if (instance == null && Application.isPlaying) { var singleton = new GameObject(); instance = singleton.AddComponent(); singleton.name = "(singleton)_" + typeof(T); // singleton.hideFlags = HideFlags.None; // DontDestroyOnLoad(singleton); } else { // DontDestroyOnLoad(instance.gameObject); } } // instance.hideFlags = HideFlags.None; } return instance; } } // public static bool IsInitialized // { // get // { // return instance != null; // } // } // public virtual void Awake() // { // if (instance != null) // { // Debug.LogErrorFormat("Trying to instantiate a second instance of singleton class {0}", GetType().Name); // } // else // { // instance = (T)this; // } // } // public virtual void OnDestroy() // { // if (instance == this) // { // instance = null; // } // } }