U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 15 章 · 寻路与导航
/
第 258 课
LESSON 258 · 寻路与导航
导航与动画整合
导航动画整合完成。下一课做玩家跟随。
⏱ 约 14 分钟
📊 难度:
入门
🗂 第 15 章 · 寻路与导航
📍 第 258 / 300 课
课程进度
258 / 300
🎯
本节学习目标
整合速度动画
实现攻击停顿
实现战斗状态
🚀
课程导读
“AI 走路时有走路动画、停下攻击”——把导航与动画状态机打通。本课整合。
◆
速度驱动动画
走/跑/停自动切换。
【准备】敌人 Animator(第 130 课)状态:Idle、Walk、Run、Attack、Death。
【参数】Speed(Float)。
【代码】
public NavMeshAgent agent; public Animator anim;
void Update() {
float speed = agent.velocity.magnitude;
anim.SetFloat("Speed", speed, 0.1f, Time.deltaTime);
}
【效果】agent 走→Walk 动画;停→Idle。
【阈值】Blend Tree 把 Idle(0)/Walk(1)/Run(2) 按速度融合(第 134 课)。
【朝向】agent 转向由它自己处理(Angular Speed),动画跟朝向即可。
【到达停顿】agent 停在攻击距离时自动转 Idle(速度 0)。
【测试】敌人走近/停下,动画跟着切换。
【完成】AI“会表演”了!
💡
导航动画 = agent.velocity 大小 → SetFloat(Speed) → 混合树。一行打通。
◆
攻击与战斗状态
打到你了。
【攻击触发】到达攻击距离:
void Update() {
if (agent.remainingDistance <= agent.stoppingDistance && !agent.pathPending) {
Attack();
}
}
void Attack() {
agent.isStopped = true; // 停下
anim.SetTrigger("Attack");
// 攻击动画事件里判定伤害(第 135/240 课)
}
【恢复追击】攻击结束(动画事件/协程)后:
agent.isStopped = false;
agent.SetDestination(player.position);
【攻击冷却】定时攻击(别连发):
public float attackCooldown = 1.5f;
private float lastAttack;
if (Time.time - lastAttack > attackCooldown) { lastAttack = Time.time; Attack(); }
【死亡】hp<=0:anim.SetTrigger("Death") + 停 agent + 布娃娃(第 242 课)。
【完整循环】追击(走)→ 停下(攻)→ 追击…
【测试】敌人追、停、攻击、死亡全流程动画正确。
【完成】敌人“有血有肉”了!
✅
战斗循环 = 追击(SetDestination)→ 停下(isStopped)→ 攻击(Trigger+冷却)→ 恢复。四步。
⚠
常见错误与排查
⛔
错误:
攻击时角色还在走?
原因:
没停 agent 或没设 StoppingDistance
解决:
攻击时 agent.isStopped=true;Agent 的 StoppingDistance 设成攻击距离。
★
动手练习
课后小任务(做出来才算真的学会)
用速度驱动敌人走/停动画
实现攻击停顿与冷却
整合死亡动画
✓
本节小结
导航动画整合完成。下一课做玩家跟随。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
群组 AI 与避让
下一课 →
玩家跟随与 AI 伙伴
↑