namespace SRF.Components { using System; using System.Diagnostics; using UnityEngine; using Debug = UnityEngine.Debug; /// /// Inherit from this component to easily create a singleton gameobject. /// /// public abstract class SRSingleton : SRMonoBehaviour where T : SRSingleton { private static T _instance; /// /// Get the instance of this singleton. /// ().Length == 2) { Destroy(gameObject); } else { Destroy(this); } return; } _instance = (T) this; } // If no other monobehaviour request the instance in an awake function // executing before this one, no need to search the object. protected virtual void Awake() { Register(); } protected virtual void OnEnable() { // In case of code-reload, this should restore the single instance if (_instance == null) { Register(); } } // Make sure the instance isn't referenced anymore when the user quit, just in case. private void OnApplicationQuit() { _instance = null; } } }