diff --git a/Assets/_Game/Scripts/Enemies/AI/BatchLOSSystem.cs b/Assets/_Game/Scripts/Enemies/AI/BatchLOSSystem.cs index 2a2638d..8c4d253 100644 --- a/Assets/_Game/Scripts/Enemies/AI/BatchLOSSystem.cs +++ b/Assets/_Game/Scripts/Enemies/AI/BatchLOSSystem.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using Unity.Collections; using UnityEngine; using UnityEngine.Jobs; +using BaseGames.Core; namespace BaseGames.Enemies.AI { @@ -20,6 +21,9 @@ namespace BaseGames.Enemies.AI { [SerializeField, Min(1)] private int _maxRequestersPerFrame = 8; + private void Awake() => ServiceLocator.Register(this); + private void OnDestroy() => ServiceLocator.Unregister(this); + private readonly List _requesters = new(); private readonly HashSet _requesterSet = new(); // O(1) 包含查询 // _indexMap 记录每个 requester 在 _requesters 中的下标,供 Unregister 实现 O(1) 删除 diff --git a/Assets/_Game/Scripts/Enemies/EnemyBase.cs b/Assets/_Game/Scripts/Enemies/EnemyBase.cs index 10a3a29..152e58d 100644 --- a/Assets/_Game/Scripts/Enemies/EnemyBase.cs +++ b/Assets/_Game/Scripts/Enemies/EnemyBase.cs @@ -644,10 +644,12 @@ namespace BaseGames.Enemies protected virtual void OnEnable() { _onPlayerSpawned?.Subscribe(SetPlayerTransform).AddTo(_subs); + Core.ServiceLocator.GetOrDefault()?.Register(this); } protected virtual void OnDisable() { + Core.ServiceLocator.GetOrDefault()?.Unregister(this); _subs.Clear(); }