首页/ 第 15 章 · 寻路与导航/ 第 254 课
LESSON 254 · 寻路与导航

动态障碍 NavMeshObstacle

动态障碍已掌握。下一课学 NavMesh Link。

⏱ 约 13 分钟📊 难度:入门🗂 第 15 章 · 寻路与导航📍 第 254 / 300 课
课程进度
254 / 300

🎯本节学习目标

  • 理解动态障碍
  • 实现移动障碍挡路
  • 实现开关门挡路

🚀课程导读

“门一关敌人就过不去”——动态障碍让 AI“识别会变的路”。本课实现。

NavMeshObstacle 基础

会动的“路障”。

  1. 【问题】NavMesh 是静态的;移动的物体不在网格里,AI 不知道绕。
  2. 【NavMeshObstacle】动态障碍组件:运行时把“挡路区域”标出,AI 自动绕行。
  3. 【添加】给移动的障碍物(门、箱子、滚石)加 NavMeshObstacle 组件。
  4. 【属性】
  5. Shape:Box(盒子)/ Capsule(胶囊)。
  6. Center / Size:障碍体积。
  7. Carve:勾选后“雕刻”出障碍区域(AI 绕行);不勾只是碰撞阻挡。
  8. 【说明】Carve 开启时,AI 的路径实时更新绕开它。
  9. 【性能】Carve 每帧更新有开销,数量别太多。
  10. 【完成】移动障碍“挡得住”了!
💡
NavMeshObstacle = 会动的路障:勾 Carve 让 AI 实时绕行。移动障碍必备。

实战:开关门挡路

门关 AI 绕行、门开 AI 直走。

  1. 【开门场景】门对象(带 NavMeshObstacle + Carve)。
  2. 【状态】门开时:NavMeshObstacle.enabled = false(不挡);门关时 enabled = true(挡)。
  3. 【代码】
  4. public NavMeshObstacle doorObstacle;
  5. void Open() { doorObstacle.enabled = false; /* 门动画 */ }
  6. void Close() { doorObstacle.enabled = true; }
  7. 【效果】门关 AI 绕行、门开 AI 穿过。
  8. 【性能】很多 Carve 障碍会卡:控制数量或用“区域成本”方案替代(第 253 课)。
  9. 【替代方案】动态改区域成本封路(进阶)。
  10. 【测试】放一个移动箱子,AI 绕开它。
  11. 【完成】动态障碍系统“活”了!
  12. 【注意】Carve 障碍要放在 NavMesh 附近才生效。
  13. 【说明】物体不动时别开 Carve(省性能)。
动态障碍用法:移动物加 Carve,静止时关掉(省性能)。开关门是经典应用。

常见错误与排查

错误:AI 无视障碍直接穿?
原因:没勾 Carve 或障碍不在路径上
解决:障碍勾 Carve;确认障碍体积覆盖挡住的位置;重新检查烘焙。

动手练习

课后小任务(做出来才算真的学会)

  • 给移动箱子加障碍并测试绕行
  • 做关门挡路、开门放行
  • 控制 Carve 性能

本节小结

动态障碍已掌握。下一课学 NavMesh Link。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课NavMesh 烘焙设置