using UnityEngine; namespace BaseGames.Enemies.Behaviors { /// /// 出生 / 外部时机触发执行指定能力(零代码替代每敌人专属的出生触发脚本)。 /// /// 勾选 executeOnSpawn:对象池取出并完成 重置后自动执行能力 /// (例如精英怪死亡时生成的小怪落地即下坠)。 /// 公共方法 :供场景战斗触发器 / UnityEvent / 动画事件在外部时机调用 /// (例如场景预置的天花板敌人被战斗触发器激活下坠)。 /// /// 能力本身由挂载的 EnemyAbilityBase 组件(按 EnemyAbilitySO.abilityId 注册)实现, /// 本组件只负责"在某个时机调用某个能力"。 /// [DisallowMultipleComponent] public class EnemyAbilityTrigger : MonoBehaviour { [Header("能力")] [Tooltip("要执行的能力 Id(须与某个 EnemyAbilityBase 的 EnemyAbilitySO.abilityId 一致)")] [SerializeField] private string _abilityId = "ability_id"; [Header("触发时机")] [Tooltip("对象池生成 / OnSpawn 重置完成后自动执行(用于被生成出来即触发的敌人)")] [SerializeField] private bool _executeOnSpawn = true; private EnemyBase _enemy; private void Awake() { _enemy = GetComponentInParent(); if (_enemy == null) Debug.LogError($"[EnemyAbilityTrigger] {name} 找不到 EnemyBase。", this); } private void OnEnable() { if (_enemy != null) _enemy.Spawned += OnEnemySpawned; } private void OnDisable() { if (_enemy != null) _enemy.Spawned -= OnEnemySpawned; } private void OnEnemySpawned() { if (_executeOnSpawn) Trigger(); } /// /// 立即执行配置的能力(外部时机触发:场景触发器 / UnityEvent / 动画事件调用)。 /// public void Trigger() { _enemy?.Abilities.Get(_abilityId)?.Execute(); } } }