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

玩家跟随与 AI 伙伴

AI 伙伴完成。下一课寻路章综合练习。

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

🎯本节学习目标

  • 实现跟随玩家
  • 实现保持距离
  • 实现协作攻击

🚀课程导读

“带个小弟”——AI 伙伴跟随、保持距离、帮忙打怪。本课实现。

跟随玩家

小弟“跟班”。

  1. 【脚本 Follower】
  2. public Transform leader; // 玩家
  3. public float followDistance = 2f;
  4. public float stopDistance = 1.5f;
  5. private NavMeshAgent agent;
  6. void Start() { agent = GetComponent<NavMeshAgent>(); }
  7. void Update() {
  8. float dist = Vector3.Distance(transform.position, leader.position);
  9. if (dist > stopDistance) {
  10. // 在玩家身后找目标点(保持跟随距离)
  11. Vector3 toLeader = (transform.position - leader.position).normalized;
  12. Vector3 target = leader.position + toLeader * followDistance;
  13. agent.SetDestination(target);
  14. } else {
  15. agent.isStopped = true;
  16. }
  17. }
  18. 【说明】目标点 = 玩家位置 + 指向自己的方向×跟随距离(站在身后)。
  19. 【距离】玩家走远就追、近了就停。
  20. 【避让】agent 自动避让玩家与障碍。
  21. 【测试】玩家移动,伙伴跟随保持距离。
  22. 【完成】“跟班”上线!
💡
跟随 = 目标点 = 玩家 + 反方向偏移×距离。三行实现“站身后”。

协作攻击

帮你“打怪”。

  1. 【目标识别】伙伴发现敌人:
  2. public float detectRange = 8f;
  3. Enemy FindTarget() {
  4. // 找最近的敌人(Physics.OverlapSphere + 距离比较)
  5. }
  6. 【攻击】发现敌人 → 追击 → 攻击(第 258 课敌人逻辑复用)。
  7. 【协作】多个伙伴打同一目标(各自攻击,目标共享)。
  8. 【切换】目标死亡后重新找。
  9. 【实现】复用“敌人 AI”逻辑给伙伴(加“跟随/攻击”状态)。
  10. 【状态机】伙伴状态:Follow(跟随)、Combat(战斗)、Idle。
  11. 【跟随优先级】玩家遇敌 → 伙伴进 Combat;无敌人 → Follow。
  12. 【测试】玩家打怪,伙伴自动帮忙。
  13. 【完成】“好队友”上线!
  14. 【注意】别让伙伴和玩家抢一个点(目标偏移,第 257 课)。
  15. 【进阶】伙伴指令(跟随/攻击/待命)。
AI 伙伴 = 跟随(状态)+ 战斗(复用敌人逻辑)+ 切换(玩家遇敌转战斗)。

常见错误与排查

错误:伙伴挡路/挤玩家?
原因:跟随目标点太近
解决:加大 followDistance;给目标加偏移;agent 半径配合。

动手练习

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

  • 实现伙伴跟随与保持距离
  • 实现伙伴发现敌人攻击
  • 做跟随/战斗状态切换

本节小结

AI 伙伴完成。下一课寻路章综合练习。

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

← 上一课导航与动画整合