fix(enemy): 冲锋禁止以中心悬空姿态收尾(会导致导航映射失败/巡逻失效)

新增 EnemyMovement.IsCenterOverGround() 与 RushAbility.SettleRoutine:
冲锋结束时若着地却中心悬在崖外,继续朝原方向推进直到离地(自由落体)或中心重回地面上方;
有时限,超时仍未脱离则告警暴露地形问题(崖沿有墙),不静默留下坏站位。
This commit is contained in:
2026-07-27 15:50:01 +08:00
parent 80c0e5c277
commit 47c2ce7e99
2 changed files with 45 additions and 0 deletions
@@ -251,6 +251,20 @@ namespace BaseGames.Enemies
new Vector2(sign, 0f), _wallCheckDist, _wallMask);
}
/// <summary>
/// 身体中心正下方是否有地面。
/// <para>用于禁止"中心悬在崖外"的停留姿态:碰撞体后半截压在平台角上时物理仍会托住敌人
/// (刚体冻结旋转不会翻下去),但导航无法把该位置映射到可行走段,会导致巡逻/寻路失效。
/// 因此任何"停下来"的收尾都必须满足本条件(或已离地处于自由落体中)。</para>
/// </summary>
public bool IsCenterOverGround()
{
var body = Body;
if (body == null || body.Collider == null) return true; // 无身体几何时不做限制(错误已由 EnemyBase 报出)
Bounds b = body.Bounds;
return Physics2D.Raycast(new Vector2(b.center.x, b.min.y), Vector2.down, _groundCheckDist, _groundMask);
}
/// <summary>朝 <paramref name="dir"/> 前缘外是否为悬崖(脚边地面缺失,会让碰撞体越出地形边缘)。</summary>
public bool WouldFallAhead(float dir)
{