feat(enemy): Wander 巡逻改为当前段内随机 + 按身体宽度内缩两端
修复地面单位 Wander 巡逻"走一小段就停": - 随机点从全图(GetRandomPointOnGraph)改为限定在 agent 当前所站的 NavSegment 上, 不再跨越跳/落/拐角 NavLink,避免路径跨沟被崖边夹停或卡在过不去的 link。 - 段内随机 t 按"身体前缘安全余量(碰撞体半宽 + 悬崖检测前向偏移)"从两端各内缩, 避免随机点落在角色宽度站不住的崖沿(WouldFallAhead 夹停、IsFollowingAPath 不复位→卡死)。 - NavAgent.SetRandomDestinationOnCurrentSegment(endMargin):段内采样+内缩(段过短退化到中点) - EnemyMovement.EdgeSafeMargin:身体前缘安全余量 - IPathAgent.WalkToRandomOnSegment():EnemyNavAgent 传入 margin;飞行单位复用局部偏移;Null 返回 false Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -62,6 +62,13 @@ namespace BaseGames.Enemies
|
||||
/// <summary>移动到随机可到达点(巡逻 fallback)。</summary>
|
||||
bool WalkToRandom();
|
||||
|
||||
/// <summary>
|
||||
/// 段内随机游走:随机点限制在 agent 当前所站的这一条导航段上,不跨越任何 NavLink(跳/落/拐角)。
|
||||
/// 供 Wander 巡逻使用——地面单位只在当前平台段内来回,避免被崖边夹停或卡在过不去的 link 处。
|
||||
/// 未映射到导航段(不在图上)时返回 false。
|
||||
/// </summary>
|
||||
bool WalkToRandomOnSegment();
|
||||
|
||||
// ── 连接段事件 ──────────────────────────────────────────────────
|
||||
/// <summary>开始穿越连接段时触发(传入连接段类型)。</summary>
|
||||
event Action<NavLinkType> OnLinkStarted;
|
||||
@@ -91,6 +98,7 @@ namespace BaseGames.Enemies
|
||||
public Vector2 CurrentLinkEnd => Vector2.zero;
|
||||
public bool CanReach(Vector2 _) => false;
|
||||
public bool WalkToRandom() => false;
|
||||
public bool WalkToRandomOnSegment() => false;
|
||||
public event Action<NavLinkType> OnLinkStarted { add { } remove { } }
|
||||
public event Action<NavLinkType> OnLinkCompleted{ add { } remove { } }
|
||||
public event Action OnNavPathFailed { add { } remove { } }
|
||||
|
||||
Reference in New Issue
Block a user