导航网格与避让

导航网格(NavMesh)是所有 AI 移动的地基。地基没打好,上层的行为树 / StateTree 会全程报错"无法到达"。

生成与覆盖

  • NavMeshBoundsVolume:放在场景里覆盖可行走区域,按 P 可视化(绿色 = 可达);
  • 运行模式:编辑器里生成可在运行时重新生成(动态障碍物场景需要),但成本高;
  • 导航区域与成本:可以用"导航修饰区域"让 AI 天然偏好 / 回避某些区域(如"避开草地"、"走在路上")。这是关卡设计层面的 AI 引导手段。

验证清单

检查项 工具
目标点可达吗 按 P 看绿色覆盖,或场景里 AI Debug 的路径显示
门口 / 楼梯能过吗 NavMesh 的"最小通道宽度"设置
动态障碍更新 检测移动障碍物时配置"动态导航"
上下坡可行走 行走半径 / 最大坡度设置

避让(Avoidance)

大量 AI 同向移动时会互相穿插碰撞。UE 提供避让机制(基于 RVO 的 Detour 群避让):

  • 角色移动组件勾选避让相关选项;
  • 每个避让体有"避让半径",拥挤时 AI 会自动绕开同 colliding 的 AI。

避让计算也有成本:上百个 AI 同屏时,避让半径不要开太大,必要时按 AI 距离玩家远近分档开启(远处的关掉,反正看不清穿插)。

寻路失败的处理

AI 永远可能"找不到路"(目标动态变化、NavMesh 有孔洞)。稳健的做法:

  1. 移动请求的结果回调里处理 Blocked / OffPath 等结果码,而不是假装永远成功;
  2. 失败时写黑板(如 PathBlocked = true),让决策层换策略(重选目标 / 等待 / 换近战);
  3. 不要无限重试同一个移动请求——见过 AI 卡在墙边每帧重试的案例,CPU 空转。