阳泉市网站建设_网站建设公司_测试工程师_seo优化
2026/1/11 19:49:54 网站建设 项目流程

一、为什么你必须升级到老 NavMesh?

如果你还在用 2021 LTS 之前的 Navigation 窗口做 Bake,那你一定踩过这些坑:

  • 场景里一移动箱子,就要重烤 NavMesh,CPU 直接爆炸;

  • 不同体型的 NPC 必须共用同一张 Mesh,导致“巨人穿不过门、老鼠上楼梯”这种魔幻现实;

  • 代码里各种NavMeshAgent.SetDestination写得好好的,一上真机就集体“漂移”。

Unity 2022.2 之后,官方把导航整块拆成AI Navigation 包(com.unity.ai.navigation),老系统被标记为 Obsolete。新系统 = 可运行时烘焙 + 多代理支持 + 真正的动态障碍,香到飞起。


二、5 分钟搭好最小可跑场景

  1. 新建 3D 项目,把 AI Navigation 包装上(Window → Package Manager → Unity Registry)。

  2. 建一个 Plane 当地面,摆几堵 Cube 当墙。

  3. GameObject → AI → NavMesh Surface,选中地面 + 墙壁,Inspector 点 Bake,蓝色网格瞬间生成。

  4. GameObject → 3D Object → Cylinder,Add Component → NavMesh Agent。

  5. 给圆柱挂个脚本:

csharp

复制

using UnityEngine; using UnityEngine.AI; public class MoveToClick : MonoBehaviour { NavMeshAgent agent; void Start() => agent = GetComponent<NavMeshAgent>(); void Update() { if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hit)) agent.destination = hit.point; } } }
  1. 运行 → 鼠标点哪圆柱走哪,路径实时避墙,全程零魔法。


三、新系统核心概念一张图看懂

表格

复制

组件作用和老版差异
NavMesh Surface真正持有 NavMesh 数据,可运行时 Bake老版数据藏在场景里,无法动态更新
NavMesh Modifier让子树在烘焙时“无视/改 Area/禁止走路”替代 Navigation Static 复选框
NavMesh Modifier Volume立方体区域内强行改 Area老版做不到“空气墙”
NavMesh Link / Off-Mesh Link跳跃、爬梯、开门新版支持运行时改起点终点
NavMesh Obstacle动态障碍,两种模式:Obstruct vs Carve老版只有 Obstruct,不会挖洞

四、动态障碍:从“撞墙”到“挖洞”

把箱子加上 Rigidbody + NavMesh Obstacle:

  • Obstruct 模式:箱子靠 RVO 被绕开,适合不停移动的推车。

  • Carve 模式:箱子静止后在 NavMesh 上挖洞,重新寻路,适合可被玩家拖动的障碍。
    记得把Carve Only Stationary勾上,移动时不反复挖洞,性能翻倍。


五、多体型 NPC:一张图各自走各路

  1. Window → AI → Navigation → Agents 页签,新增两种 Agent Type:

    • Humanoid:半径 0.5 m,高 2 m,跳距 3 m。

    • Spider:半径 0.3 m,高 0.4 m,可爬 80° 斜坡。

  2. 给地面再挂两个 NavMesh Surface,各自指定 Agent Type,Bake 出两张 Mesh。

  3. 把士兵的 NavMesh Agent → Agent Type 选 Humanoid,小蜘蛛选 Spider,从此各走各的路,互不抢道。


六、运行时烘焙:无限地图的杀手锏

csharp

复制

NavMeshSurface surface; void Start() { surface = GetComponent<NavMeshSurface>(); surface.BuildNavMesh(); // 一帧搞定 }

配合Sliding Window示例,角色走到哪,NavMesh 就增量烘焙到哪,内存只保留玩家周围 128×128 m 的格子,真正做到“伪无限”大世界。


七、动画 + 导航:告别“滑冰”

老版 Root Motion 和 NavMeshAgent 互相打架?新版官方直接给出模板脚本LocomotionSimpleAgent.cs

  1. 关闭agent.updatePosition / updateRotation,由动画驱动位置。

  2. 每帧把agent.nextPosition同步回transform.position,误差过大时再把角色拉回代理位置,兼顾“真实踩点”与“碰撞避让”。

  3. agent.steeringTarget喂给 LookAt IK,提前转头,动作自然。


八、常见坑与调优 checklist

  • Bake 失败全红:检查是否忘了给地面加 Collider 或 NavMesh Modifier 把对象设成 Walkable。

  • Agent 原地打转:把Angular Speed调到 500+,或把Acceleration降低。

  • Carve 后帧率暴跌:Tile Size 默认 256 改 64, carving 并行度↑;移动阈值(Move Threshold)≥ 0.5 m。

  • Off-Mesh Link 不走:确认两端在 NavMesh 上且 Area Mask 包含 Jump;Cost Modifier 别手滑填了 999。

  • Height Mesh 踩空楼梯:在 NavMesh Surface → Advanced → Build Height Mesh 勾上,代理会精确贴楼梯高度,不再悬空滑。


九、升级老项目 3 步走

  1. 备份!

  2. Window → AI → NavMesh Updater → Convert → 一键把旧 Navigation Static 转成 NavMesh Modifier。

  3. 删掉早年从 GitHub 扒的NavMeshComponents脚本,避免重复定义。


十、结语

AI Navigation 不是“小修小补”,而是 Unity 导航的彻底重构:

  • 数据与场景解耦 → 支持 DLC 动态加载;

  • 多代理、多 Area → 战术 FPS、RTS、潜行各取所需;

  • 运行时烘焙 + 动态雕刻 → 沙盒、Roguelike 也能畅玩。

把这篇笔记收藏,下次面试被问到“Unity 怎么做动态寻路”,直接把 Carve 模式、多 Surface、运行时 Bake 甩他脸上,稳。

Demo 工程已上传 GitHub,点个 Star 不迷路 ➜ github.com/yourname/AI-Navigation-Demo
(完)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询