namespace UnityEngine.Rendering { // Use this class to get a static instance of a component // Mainly used to have a default instance /// /// Singleton of a Component class. /// /// Component type. public static class ComponentSingleton where TType : Component { static TType s_Instance = null; /// /// Instance of the required component type. /// public static TType instance { get { if (s_Instance == null) { GameObject go = new GameObject("Default " + typeof(TType).Name) { hideFlags = HideFlags.HideAndDontSave }; #if !UNITY_EDITOR GameObject.DontDestroyOnLoad(go); #endif go.SetActive(false); s_Instance = go.AddComponent(); } return s_Instance; } } /// /// Release the component singleton. /// public static void Release() { if (s_Instance != null) { var go = s_Instance.gameObject; CoreUtils.Destroy(go); s_Instance = null; } } } }