From 347d0e2f5000ed1feadf2cdb0b25eb22bcf4b2be Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 10 Jul 2026 13:33:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(enemy):=20EnemyLocomotion=20=E6=8C=89?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E9=A9=B1=E5=8A=A8=E6=AD=A5=E6=80=81=E5=8A=A8?= =?UTF-8?q?=E7=94=BB(Idle/Walk/Alert/Run)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- Assets/_Game/Scripts/Enemies/EnemyBase.cs | 15 +++++++++++++++ .../Scripts/Enemies/Navigation/EnemyLocomotion.cs | 8 ++++++++ 2 files changed, 23 insertions(+) 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: