diff --git a/Runtime/ABase/Base/DataStruct/SingletonManager.cs b/Runtime/ABase/Base/DataStruct/SingletonManager.cs deleted file mode 100644 index a3023e4..0000000 --- a/Runtime/ABase/Base/DataStruct/SingletonManager.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace AlicizaX -{ - /// - /// 所有单例的统一管理器。 - /// - [DefaultExecutionOrder(-9999)] - public sealed class SingletonManager : MonoBehaviour - { - private static SingletonManager _instance; - private readonly Dictionary _singletons = new(); - - public static SingletonManager Instance - { - get - { - if (_instance == null) - { - // 查找是否已有实例 - _instance = FindFirstObjectByType(); - if (_instance == null) - { - var obj = new GameObject("[SingletonManagers]"); - _instance = obj.AddComponent(); - DontDestroyOnLoad(obj); - } - } - - return _instance; - } - } - - /// - /// 注册一个单例。 - /// - internal void Register(T instance) where T : Component - { - var type = typeof(T); - if (!_singletons.ContainsKey(type)) - { - _singletons[type] = instance; - instance.transform.SetParent(transform, false); - } - } - - /// - /// 注销单例。 - /// - internal void Unregister(T instance) where T : Component - { - var type = typeof(T); - if (_singletons.TryGetValue(type, out var current) && current == instance) - _singletons.Remove(type); - } - - /// - /// 获取一个已注册的单例(若不存在则返回 null) - /// - public T Get() where T : Component - { - _singletons.TryGetValue(typeof(T), out var result); - return result as T; - } - } - - - /// - /// 泛型单例基类。 - /// 自动注册到 SingletonManager。 - /// 支持动态创建与销毁。 - /// - public abstract class MonoSingleton : MonoBehaviour where T : Component - { - private static T _instance; - private static readonly object _lock = new(); - - public static T Instance - { - get - { - if (_instance != null) return _instance; - - lock (_lock) - { - if (_instance != null) return _instance; - - // 检查 SingletonManager 是否存在 - var manager = SingletonManager.Instance; - - // 查找场景中是否已经存在该类型 - _instance = manager.Get(); - if (_instance == null) - { - var obj = new GameObject(typeof(T).Name); - _instance = obj.AddComponent(); - manager.Register(_instance); - } - - return _instance; - } - } - } - - protected virtual void Awake() - { - if (_instance == null) - { - _instance = this as T; - SingletonManager.Instance.Register(_instance); - } - else if (_instance != this) - { - Destroy(gameObject); - return; - } - } - - protected virtual void OnDestroy() - { - if (_instance == this) - { - SingletonManager.Instance.Unregister(this as T); - _instance = null; - } - } - } -} diff --git a/Runtime/ABase/Base/DataStruct/SingletonManager.cs.meta b/Runtime/ABase/Base/DataStruct/SingletonManager.cs.meta deleted file mode 100644 index f50a1c4..0000000 --- a/Runtime/ABase/Base/DataStruct/SingletonManager.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e7535f150dae4dbeb5604b01e21e92ed -timeCreated: 1760162930 \ No newline at end of file