导航系统

自动关联目录:导航系统

官方依据: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(成本)
概念说明
TileNavMesh 的分块单位,支持局部重建与流式
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调试绘制与统计

参考