From 6f52e4ff810dcaba270eeae37de43232b4fd7609 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 10 Jul 2026 14:36:53 +0800 Subject: [PATCH] =?UTF-8?q?@=20fix(enemy):=20Pace=20=E5=B7=A1=E9=80=BB?= =?UTF-8?q?=E6=94=B9=E8=BE=B9=E6=B2=BF=E8=A7=A6=E5=8F=91=E7=BF=BB=E5=90=91?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E8=BE=B9=E7=BC=98=E5=B7=A6=E5=8F=B3=E6=8A=96?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TickPatrol 跑在 Update(可变帧率),IsWallAhead/IsLedgeAhead 在 FixedUpdate 刷新。原电平触发(每帧 blocked 就翻向)会在检测刷新前的多个 Update 帧把同一 障碍连翻多次→掉头边缘左右抖动几次才正常。改为边沿触发(仅障碍首次出现时翻 一次),用 _paceBlockedPrev 记录上帧状态。PlayMode 验证:踱步移动正常、无 连续快速翻转。 Co-Authored-By: Claude Opus 4.8 (1M context) @ --- .../_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Assets/_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs b/Assets/_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs index 2a1dca90..479450ba 100644 --- a/Assets/_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs +++ b/Assets/_Game/Scripts/Enemies/Navigation/EnemyLocomotion.cs @@ -26,6 +26,7 @@ namespace BaseGames.Enemies private LocomotionMode _gaitMode; private bool _gaitInit; private float _paceDir = 1f; + private bool _paceBlockedPrev; private int _wpIndex = -1; private int _wpDir = 1; private bool _warnedNoWaypoints; @@ -113,7 +114,12 @@ namespace BaseGames.Enemies case PatrolStrategy.Pace: // 撞墙/悬崖翻向的来回踱步(速度驱动,不依赖 nav) var mv = _enemy.Movement; - if (mv != null && (mv.IsWallAhead || mv.IsLedgeAhead)) _paceDir = -_paceDir; + bool blocked = mv != null && (mv.IsWallAhead || mv.IsLedgeAhead); + // 边沿触发:仅在"障碍首次出现"时翻向一次。TickPatrol 跑在 Update(可变帧率), + // 而 IsWallAhead/IsLedgeAhead 在 FixedUpdate 刷新——若用电平触发(每帧 blocked 就翻), + // 检测刷新前的多个 Update 帧会把同一障碍连翻多次→边缘左右抖动。 + if (blocked && !_paceBlockedPrev) _paceDir = -_paceDir; + _paceBlockedPrev = blocked; _enemy.MoveInDirection(_paceDir); break;