导航系统
自动关联目录:导航系统
官方依据:Navigation System(UE 5.8 Documentation)概述页。已核实的要点:从碰撞几何体生成导航网格、划分为 Tile 与多边形、多边形带成本、Generation Modes 有静态/动态/仅动态修改器三种、避让有 RVO 与 Detour Crowd Manager 两种。
1. 定位
导航系统解决"AI 怎么从 A 走到 B":把场景的碰撞几何体变成一张可寻路的网格,再在网格上算路径。
一句话定位:导航的成本几乎全在"网格生成"与"避让"两端——路径搜索本身很便宜,把 AI 卡住的通常也不是寻路算法。
2. 结构(已核实)
场景碰撞几何体
→ 生成 Navigation Mesh(NavMesh)
→ 划分为 Tile(瓦片)
→ 划分为 Polygon(多边形)
→ 每个多边形带 Cost(成本)| 概念 | 说明 |
|---|---|
| Tile | NavMesh 的分块单位,支持局部重建与流式 |
| Polygon | 寻路的基本单元 |
| Cost | 多边形成本,影响路径选择(可以让 AI 避开某些区域) |
| Agent | 不同体型/能力的 AI 可以有不同的 NavMesh(多 Agent 支持) |
3. 生成模式(已核实)
| 模式 | 说明 | 代价 |
|---|---|---|
| Static | 只生成一次 | 最便宜,但运行时不变 |
| Dynamic | 运行时随场景变化重建 | 最贵,但能响应动态障碍 |
| Dynamic Modifiers Only | 只更新动态修改器的影响 | 折中 |
选择依据是"世界会不会变":
- 完全静态关卡 → Static
- 有可开关的门、可破坏的障碍 → Modifiers Only 或 Dynamic
- 大量动态几何 → Dynamic(但要付出重建成本)
动态重建是导航最贵的操作,按 Tile 粒度触发;大面积频繁重建会直接吃掉帧预算。
4. 关键组件
| 组件 / 概念 | 用途 |
|---|---|
| NavMeshBoundsVolume | 定义生成范围 |
| Nav Modifier | 修改区域的成本或标记为不可通行 |
| Nav Link Proxy | 连接断开的区域(跳跃、爬梯、传送) |
| Nav Area | 区域类型与成本 |
| Detour Crowd Manager | 群体避让管理 |
| RVO(Reciprocal Velocity Obstacles) | 互惠速度障碍避让 |
5. 避让(已核实两种)
| 方案 | 特点 |
|---|---|
| RVO | 基于速度障碍的互惠避让,个体之间互相让路 |
| Detour Crowd Manager | 群体管理,把一批 AI 当作群体处理 |
避让是"大量 AI 时最先出问题"的部分——寻路没问题,但一群 AI 挤在一起互相推。
6. 代价与权衡
| 设计 | 收益 | 代价 | 什么时候不该用 |
|---|---|---|---|
| Static 生成 | 几乎零运行时成本 | 世界变了不生效 | 有动态障碍时不可用 |
| Dynamic | 完全响应变化 | 重建成本最高 | 大面积频繁变化时慎用 |
| Modifiers Only | 折中 | 只响应修改器 | 需要响应任意几何变化时不够 |
| Tile 粒度 | 局部重建 | Tile 太大则重建范围大 | 需按场景调 Tile 大小 |
| RVO 避让 | 个体表现自然 | 个体越多越贵 | 超大量 AI 应上 Mass |
| 多 Agent NavMesh | 不同体型不同网格 | 每份网格都要内存与生成时间 | 体型差异不大时不必 |
7. 踩坑与排查
| 坑 | 现象 | 怎么验证 |
|---|---|---|
| AI 完全不走 | 没有 NavMesh 覆盖 | 显示 NavMesh(编辑器 Show > Navigation) |
| 走到一半卡住 | 路径被动态障碍截断 | 检查生成模式;动态障碍是否触发重建 |
| 动态重建卡顿 | 帧率周期性尖峰 | 缩小 Tile、减少动态几何、改用 Modifiers |
| 一群 AI 互相挤 | 避让没配或配置不当 | 检查 RVO / Crowd Manager |
| AI 走了奇怪的路线 | 成本设置不对 | 检查 Nav Area 与成本 |
| 多体型 AI 表现异常 | Agent 配置不匹配 | 检查 NavMesh 的 Agent 设置 |
| 内存高 | 多份 NavMesh | 合并体型相近的 Agent |
| 打包后导航失效 | 导航数据没构建/没打包 | 构建导航并确认打进包(WP 世界可用 Builder commandlet) |
8. 排查顺序
1. 完全不走?→ NavMesh 是否存在并覆盖
2. 半路卡住?→ 动态障碍 + 生成模式
3. 周期性卡顿?→ 动态重建范围(Tile 粒度)
4. 群体问题?→ 避让配置
5. 路线奇怪?→ 成本与 Nav Area
6. 内存/打包?→ 多 Agent 网格、导航数据是否打包9. 调试
| 手段 | 用途 |
|---|---|
编辑器 Show > Navigation | 显示 NavMesh |
Gameplay Debugger(数字键 ' 或 P) | 看当前 AI 的路径与状态 |
| Visual Logger | 记录并回放 AI 行为 |
p.NavMesh.* / 导航相关 CVar | 调试绘制与统计 |
参考
- Navigation System
- 感知系统 · 行为树 · EQS
- World 调试与校验(大世界的导航构建)
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/8b53cb56.html
更新于:2026年10月10日