using System.Collections; using System.Collections.Generic; using UnityEngine; public class MonoSingleton : MonoBehaviour where T : MonoSingleton { // [SerializeField] private bool _isLoadNotDestory = true; private static T instance; private static object locker = new object(); public static T Instance { get { if (instance == null) { lock (locker) { T[] instances = FindObjectsOfType(); if (FindObjectsOfType().Length >= 1) { instance = instances[0]; for (int i = 1; i < instances.Length; i++) { #if UNITY_EDITOR Debug.LogError($"{typeof(T)} 不应该存在多个单例!{instances[i].name}"); #endif Destroy(instances[i]); } return instance; } if (instance == null && Application.isPlaying) { var singleton = new GameObject(); instance = singleton.AddComponent(); singleton.name = "(singleton)_" + typeof(T); } else { // DontDestroyOnLoad(instance.gameObject); } } // instance.hideFlags = HideFlags.None; } return instance; } } // public static bool IsInitialized // { // get // { // return instance != null; // } // } protected virtual void Awake() { // if (_isLoadNotDestory) // { // DontDestroyOnLoad(this); // } // 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; // } // } }