导航网格与避让
导航网格(NavMesh)是所有 AI 移动的地基。地基没打好,上层的行为树 / StateTree 会全程报错"无法到达"。
生成与覆盖
- NavMeshBoundsVolume:放在场景里覆盖可行走区域,按
P可视化(绿色 = 可达); - 运行模式:编辑器里生成可在运行时重新生成(动态障碍物场景需要),但成本高;
- 导航区域与成本:可以用"导航修饰区域"让 AI 天然偏好 / 回避某些区域(如"避开草地"、"走在路上")。这是关卡设计层面的 AI 引导手段。
验证清单
| 检查项 | 工具 |
|---|---|
| 目标点可达吗 | 按 P 看绿色覆盖,或场景里 AI Debug 的路径显示 |
| 门口 / 楼梯能过吗 | NavMesh 的"最小通道宽度"设置 |
| 动态障碍更新 | 检测移动障碍物时配置"动态导航" |
| 上下坡可行走 | 行走半径 / 最大坡度设置 |
避让(Avoidance)
大量 AI 同向移动时会互相穿插碰撞。UE 提供避让机制(基于 RVO 的 Detour 群避让):
- 角色移动组件勾选避让相关选项;
- 每个避让体有"避让半径",拥挤时 AI 会自动绕开同 colliding 的 AI。
避让计算也有成本:上百个 AI 同屏时,避让半径不要开太大,必要时按 AI 距离玩家远近分档开启(远处的关掉,反正看不清穿插)。
寻路失败的处理
AI 永远可能"找不到路"(目标动态变化、NavMesh 有孔洞)。稳健的做法:
- 移动请求的结果回调里处理
Blocked/OffPath等结果码,而不是假装永远成功; - 失败时写黑板(如
PathBlocked = true),让决策层换策略(重选目标 / 等待 / 换近战); - 不要无限重试同一个移动请求——见过 AI 卡在墙边每帧重试的案例,CPU 空转。
