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:
@@ -262,6 +262,21 @@ namespace BaseGames.Enemies
|
||||
Vector2.down, _ledgeCheckDownDist, _groundMask);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 身体中心到"能站住的平台边缘最近点"的水平安全余量 = 碰撞体水平半宽 + 悬崖检测前向偏移。
|
||||
/// WouldFallAhead 在"碰撞体前缘 + _ledgeCheckFwdOffset"处探地,故身体中心必须离平台边缘至少此距离,
|
||||
/// 否则前缘探出崖沿被夹停。供 nav 段内随机游走把随机点从段两端各内缩此值,避免随机到身体站不住的崖沿点。
|
||||
/// </summary>
|
||||
public float EdgeSafeMargin
|
||||
{
|
||||
get
|
||||
{
|
||||
var col = GroundColliderOrSelf();
|
||||
float halfWidth = col != null ? col.bounds.extents.x : 0f;
|
||||
return halfWidth + Mathf.Max(0f, _ledgeCheckFwdOffset);
|
||||
}
|
||||
}
|
||||
|
||||
private void WallAndLedgeCheck()
|
||||
{
|
||||
if (_wallCheckDist > 0f)
|
||||
|
||||
Reference in New Issue
Block a user