using UnityEngine; namespace MoreMountains.Tools { /// /// Singleton pattern. /// public class MMSingleton : MonoBehaviour where T : Component { protected static T _instance; public static bool HasInstance => _instance != null; /// /// Singleton design pattern /// /// The instance. public static T Instance { get { if (_instance == null) { _instance = FindObjectOfType (); if (_instance == null) { GameObject obj = new GameObject (); _instance = obj.AddComponent (); } } return _instance; } } /// /// On awake, we initialize our instance. Make sure to call base.Awake() in override if you need awake. /// protected virtual void Awake () { if (!Application.isPlaying) { return; } _instance = this as T; } } }