首页/ 第 14 章 · 3D 游戏进阶/ 第 235 课
LESSON 235 · 3D 游戏进阶

3D 敌人与 AI 导航

3D 敌人 AI 完成。下一课做 3D 射击系统。

⏱ 约 16 分钟📊 难度:入门🗂 第 14 章 · 3D 游戏进阶📍 第 235 / 300 课
课程进度
235 / 300

🎯本节学习目标

  • 烘焙 NavMesh
  • 实现追击寻路
  • 实现巡逻

🚀课程导读

3D 敌人“知道路怎么走”靠 NavMesh(导航网格)。本课实现会追你的敌人。

NavMesh 导航烘焙

给场景“画路网”。

  1. 【NavMesh】场景的“可走区域”地图:烘焙生成。
  2. 【设置】地面/可行走物体勾 Static(Navigation Static)。
  3. 【窗口】Window → AI → Navigation(或 Navigation)打开。
  4. 【Bake】点 Bake 生成导航网格(蓝色区域=可走)。
  5. 【检查】蓝色网格覆盖地面、避开墙。
  6. 【Bake 设置】Agent Radius(角色半径)、Agent Height 等。
  7. 【动态障碍】加 NavMesh Obstacle 组件让障碍物挡路(门、箱子)。
  8. 【重新烘焙】改场景后要重新 Bake。
  9. 【注意】NavMesh 是“可行走区域”,放在物体表面上方。
  10. 【完成】场景“有路”了!
💡
NavMesh = 场景的“路网”:烘焙出可走区域,AI 沿着路网寻路。

敌人追击与巡逻

NavMeshAgent 让敌人“认路”。

  1. 【添加】给敌人加【NavMesh Agent】组件(AI 导航代理)。
  2. 【追击代码】
  3. public Transform player;
  4. private NavMeshAgent agent;
  5. void Start() { agent = GetComponent<NavMeshAgent>(); }
  6. void Update() {
  7. if (player != null) agent.SetDestination(player.position); // 设置目的地
  8. }
  9. 【说明】SetDestination 自动寻路,agent 自动绕障、避让。
  10. 【速度】agent.speed 追击速度;agent.stoppingDistance 停下距离(攻击距离)。
  11. 【巡逻】没发现玩家时在巡逻点间 SetDestination。
  12. 【视野】配合射线/距离判断是否追击(第 209/211 课思维迁移)。
  13. 【动画】agent.velocity.magnitude 驱动走路动画(第 229 课)。
  14. 【停止】agent.isStopped = true 停止移动。
  15. 【攻击】靠近玩家(stoppingDistance)触发攻击动画/伤害。
  16. 【注意】敌人对象要在 NavMesh 上(烘焙范围内)。
  17. 【测试】敌人追着玩家跑、绕障碍。
  18. 【完成】3D 敌人“活了”!
NavMeshAgent = 寻路“小车”:SetDestination 指路、speed 定快慢、stoppingDistance 定停点。

常见错误与排查

错误:敌人站在原地不动?
原因:没烘焙 NavMesh 或敌人不在 NavMesh 上
解决:确认场景已 Bake;敌人位置在蓝色网格范围内;agent.SetDestination 被调用。

动手练习

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

  • 烘焙 NavMesh
  • 让敌人追击玩家
  • 实现巡逻+视野切换

本节小结

3D 敌人 AI 完成。下一课做 3D 射击系统。

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

← 上一课3D 拾取与交互系统