SingletonMonoBehaviourClass`1.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using UnityEngine;
  3. namespace CIS
  4. {
  5. public class SingletonMonoBehaviourClass<T> : MonoBehaviour where T : UnityEngine.Object, new()
  6. {
  7. public static T instance
  8. {
  9. get
  10. {
  11. if (SingletonMonoBehaviourClass<T>.s_Instance == null)
  12. {
  13. SingletonMonoBehaviourClass<T>.s_Instance = (UnityEngine.Object.FindObjectOfType(typeof(T)) as T);
  14. }
  15. if (SingletonMonoBehaviourClass<T>.s_Instance == null)
  16. {
  17. GameObject gameObject = new GameObject(typeof(T).ToString());
  18. SingletonMonoBehaviourClass<T>.s_Instance = (gameObject.AddComponent(typeof(T)) as T);
  19. }
  20. return SingletonMonoBehaviourClass<T>.s_Instance;
  21. }
  22. }
  23. public static void Release()
  24. {
  25. if (SingletonMonoBehaviourClass<T>.s_Instance != null)
  26. {
  27. MonoBehaviour monoBehaviour = SingletonMonoBehaviourClass<T>.s_Instance as MonoBehaviour;
  28. UnityEngine.Object.Destroy(monoBehaviour.gameObject);
  29. SingletonMonoBehaviourClass<T>.s_Instance = (T)((object)null);
  30. }
  31. }
  32. protected virtual void OnApplicationQuit()
  33. {
  34. SingletonMonoBehaviourClass<T>.s_Instance = (T)((object)null);
  35. }
  36. private static T s_Instance;
  37. }
  38. }