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 && Instance != this) { Destroy(gameObject); } Instance = (T)this; OnSingletonInit(); } public virtual void OnSingletonInit() { } protected virtual void OnDestroy() { OnSingletonDestroy(); if (Instance == this) { Instance = null; } } public virtual void OnSingletonDestroy() { } } }