using UnityEngine; namespace AibisDream.Kit { public abstract class Singleton : MonoBehaviour, ISingleton where T : Singleton { public static T Instance { get; private set; } protected virtual void Awake() { if (Instance != null) { Destroy(gameObject); } else { Instance = (T)this; OnSingletonInit(); } } public virtual void OnSingletonInit() { } public static bool IsInitialized => Instance != null; protected virtual void OnDestroy() { if (Instance == this) { Instance = null; } } } }