diff --git a/Assets/_Game/Scripts/Enemies/EnemyBase.cs b/Assets/_Game/Scripts/Enemies/EnemyBase.cs index b0539825..fc27d1ef 100644 --- a/Assets/_Game/Scripts/Enemies/EnemyBase.cs +++ b/Assets/_Game/Scripts/Enemies/EnemyBase.cs @@ -487,6 +487,21 @@ namespace BaseGames.Enemies } } + /// 按当前移动模式播放步态动画(由 EnemyLocomotion 在模式变化时调用)。 + public void PlayLocomotionClip(LocomotionMode mode) + { + if (_animancer == null || _animConfig == null) return; + var clip = mode switch + { + LocomotionMode.Idle => _animConfig.Idle, + LocomotionMode.Patrol => _animConfig.Walk, + LocomotionMode.Face => _animConfig.Alert, + LocomotionMode.Approach => _animConfig.Run, + _ => null, + }; + if (clip != null) _animancer.Play(clip); + } + // ── 动画事件钩子(由 EnemyAnimationEvents 调用)──────────────────── /// diff --git a/Assets/_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs b/Assets/_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs index 23495d6e..e0e7243e 100644 --- a/Assets/_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs +++ b/Assets/_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs @@ -18,6 +18,8 @@ namespace BaseGames.Enemies private LocomotionMode _mode = LocomotionMode.Idle; private Transform _approachTarget; private Vector2 _facePoint; + private LocomotionMode _gaitMode; + private bool _gaitInit; public LocomotionMode CurrentMode => _mode; public bool IsMoving => _enemy != null && _enemy.Nav != null && _enemy.Nav.IsMoving; @@ -69,6 +71,12 @@ namespace BaseGames.Enemies private void Update() { if (_enemy == null) return; + if (!_gaitInit || _gaitMode != _mode) + { + _enemy.PlayLocomotionClip(_mode); + _gaitMode = _mode; + _gaitInit = true; + } switch (_mode) { case LocomotionMode.Idle: