using System.Collections; namespace BaseGames.Enemies.Abilities { /// /// 巡逻行为能力:巡逻速度 + Patrol 阶段(播 Walk 动画) + 经导航随机游走。保持到被打断。 /// 移动执行归本能力,AI 只在进入巡逻状态时触发。 /// public class PatrolAbility : EnemyAbilityBase { protected override IEnumerator ExecuteCoroutine() { Phase = AbilityRunState.Active; _enemy.SetAiPhase(AiPhase.Patrol); var nav = _enemy.Nav; if (nav != null && _enemy.Stats != null) nav.SetSpeed(_enemy.Stats.WalkSpeed); while (true) { if (nav != null && !nav.IsMoving) nav.WalkToRandom(); // 到达后再选一个随机可达点,持续游走 yield return null; } } protected override void OnInterrupted(InterruptReason reason) { _enemy.Nav?.StopNavigation(); // 退出巡逻时清除残留游走目标 } } }