首页/ 第 9 章 · 动画系统/ 第 145 课
LESSON 145 · 动画系统

综合练习:完整角色动画状态机

角色状态机完成!动画章毕业。下一章进入 UI 界面系统,为游戏加上“脸面”。

⏱ 约 25 分钟📊 难度:入门🗂 第 9 章 · 动画系统📍 第 145 / 300 课
课程进度
145 / 300

🎯本节学习目标

  • 综合运用动画章知识
  • 搭建完整角色状态机
  • 实现参数驱动的动画切换

🚀课程导读

把动画章所有能力整合:一个角色,六种状态、参数驱动、平滑过渡。这是动画章毕业项目!

准备素材

角色 + 动画片段。

  1. 导入一个 Humanoid 角色模型(带基础动画或商店下载)。
  2. 确认 Rig=Humanoid、Avatar 配置成功(第 138 课)。
  3. 准备动画片段:Idle(待机)、Walk(走路)、Run(跑步)、Jump(跳跃)、Attack(攻击)、Hit(受击)、Dead(死亡)。
  4. 建议用商店“免费人形动画包”,或让角色模型自带。
  5. 【混合树】把 Walk/Run 做进一个 1D 混合树(Speed 参数),第 134 课。
  6. 把动画片段整理进 Animations 文件夹。
💡
没有现成动画也没关系:用 Animation 窗口自己录 Idle/Walk 基础版也能练。

搭建状态机

六状态 + 参数 + 过渡。

  1. 创建 Animator Controller,命名 CharacterAnim。
  2. 【状态】创建 6 个状态并绑定动画:Idle、Move(混合树)、Jump、Attack、Hit、Dead。
  3. 【参数】添加:Speed(Float)、IsGrounded(Bool)、Attack(Trigger)、IsDead(Bool)、IsHit(Bool)。
  4. 【过渡】
  5. Idle ↔ Move:Speed>0.1 / Speed<0.1。
  6. Move → Jump:IsGrounded=false;Jump → Idle:IsGrounded=true。
  7. Any State → Hit:IsHit=true;Hit → Idle:播完(Has Exit Time)。
  8. Any State → Dead:IsDead=true。
  9. 【注意】Jump 在空中不可切攻击?可加限制(进阶)。
  10. 【初始状态】Idle 设为默认。
  11. 【过渡时长】0.1-0.15 秒平滑。
💡
状态机“画”好后,重点在过渡条件是否互斥清晰。

代码驱动与测试

让角色动起来。

  1. 挂 CharacterControl 脚本(第 142 课整合版):
  2. public float speed = 4f;
  3. void Update() {
  4. float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical");
  5. Vector3 move = new Vector3(h, 0, v);
  6. anim.SetFloat("Speed", move.magnitude, 0.1f, Time.deltaTime);
  7. if (move != Vector3.zero) transform.rotation = Quaternion.LookRotation(move);
  8. bool grounded = Physics.Raycast(transform.position, Vector3.down, 0.2f);
  9. anim.SetBool("IsGrounded", grounded);
  10. if (Input.GetKeyDown(KeyCode.Space) && grounded) { anim.SetTrigger("Jump"); rb.AddForce(Vector3.up * 8f, ForceMode.Impulse); }
  11. if (Input.GetMouseButtonDown(0)) { anim.SetTrigger("Attack"); }
  12. if (Input.GetKeyDown(KeyCode.H)) { anim.SetBool("IsHit", true); }
  13. if (Input.GetKeyDown(KeyCode.K)) { anim.SetBool("IsDead", true); }
  14. }
  15. 播放测试:WASD 走动/跑步、空格跳、左键攻击、H 受击、K 死亡。
  16. 逐个验证每个状态与过渡,调整 Duration 与条件。
  17. 检查无报错,保存场景与动画控制器。
  18. 【完成】你的角色已经“会表演”了!
动画章毕业:从录关键帧到完整状态机,你已掌握游戏动画的 90% 核心能力。

常见错误与排查

错误:受击后无法恢复?
原因:Hit 状态的过渡没设好
解决:Hit→Idle 过渡勾选 Has Exit Time;或用 Trigger 而非 Bool 复位。

动手练习

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

  • 完成六状态完整状态机
  • 用参数驱动全部切换并测试
  • (进阶)把 Walk/Run 合并成混合树

本节小结

角色状态机完成!动画章毕业。下一章进入 UI 界面系统,为游戏加上“脸面”。

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

← 上一课布娃娃 Ragdoll