#if GRAPH_DESIGNER using UnityEngine; using Opsive.BehaviorDesigner.Runtime.Tasks; using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; using BaseGames.Enemies; using BaseGames.Enemies.Abilities; namespace BaseGames.Enemies.AI { /// /// BD Action:强制切换敌人到指定 EnemyStateType,并中断所有正在执行的能力。 /// 单帧完成,立即返回 Success。 /// /// 典型用法: /// - 进入 Stagger 状态后重置为 Idle(替代手动停止动画) /// - 技能打断后显式回到 Controlled 状态 /// [TaskName("Set State")] [TaskCategory("BaseGames/Enemy/State")] [TaskDescription("强制切换敌人物理/战斗状态(ForceState)")] public class BD_SetState : Action { [Tooltip("切换到的目标状态")] [SerializeField] private EnemyStateType m_TargetState = EnemyStateType.Controlled; [Tooltip("切换状态时同时中断所有正在执行的能力")] [SerializeField] private bool m_InterruptAbilities = true; private EnemyBase _enemy; public override void OnAwake() => _enemy = GetComponent(); public override TaskStatus OnUpdate() { if (_enemy == null) return TaskStatus.Failure; if (m_InterruptAbilities) _enemy.Abilities?.InterruptAll(InterruptReason.ExternalRequest); _enemy.ForceState(m_TargetState); return TaskStatus.Success; } } } #endif