首页/ 第 8 章 · 输入系统/ 第 122 课
LESSON 122 · 输入系统

输入与动画联动

输入与动画联动已实现。下一课学 UI 按钮点击响应。

⏱ 约 14 分钟📊 难度:入门🗂 第 8 章 · 输入系统📍 第 122 / 300 课
课程进度
122 / 300

🎯本节学习目标

  • 把输入映射为动画参数
  • 控制动画状态切换
  • 实现平滑动画过渡

🚀课程导读

角色按 WASD 移动时,播放走路动画;停下播放待机。本课把输入与动画系统接通(动画系统第 9 章详讲,本课先用基础)。

准备动画参数

在 Animator 里设参数。

  1. 【前提】角色有 Animator 组件 + 动画控制器(第 130 课);本课假设已有 Idle/Walk/Run 状态。
  2. 打开动画控制器(Animator Controller),在【参数 Parameters】面板添加:
  3. Speed(Float 类型):移动速度。
  4. IsMoving(Bool 类型):是否在移动。
  5. 【状态机】确保 Idle→Walk/Run 的过渡条件:Speed 大于阈值时切换到移动状态。
  6. 设置过渡(Transition)的 Has Exit Time 取消、Transition Duration 适当(0.1-0.2 平滑过渡)。
💡
动画参数是把“输入数据”传给“动画系统”的桥梁。

代码驱动动画

把输入写成参数。

  1. 在角色移动脚本里加:
  2. private Animator anim;
  3. void Awake() { anim = GetComponent<Animator>(); }
  4. void Update() {
  5. float h = Input.GetAxis("Horizontal");
  6. float v = Input.GetAxis("Vertical");
  7. Vector3 move = new Vector3(h, 0, v);
  8. float speed = move.magnitude; // 输入速度(0~1)
  9. anim.SetFloat("Speed", speed);
  10. anim.SetBool("IsMoving", speed > 0.1f);
  11. ...移动逻辑...
  12. }
  13. 【SetFloat/SetBool】把值写入 Animator 参数,状态机自动切换动画。
  14. 【平滑】SetFloat 的第三个参数(dampTime)可平滑过渡:anim.SetFloat("Speed", speed, 0.1f, Time.deltaTime);
  15. 【朝向】移动时角色转向(LookRotation),动画与朝向同步。
  16. 【跑步】按住 Shift 时 speed 更大,可触发 Run 状态(阈值判断)。
  17. 播放测试:按 WASD 走路/跑步,松开待机。
核心一行:anim.SetFloat("Speed", 输入速度)。动画自动“看脸色”切换。

常见错误与排查

错误:动画不切换?
原因:参数名不一致、或过渡条件没设置
解决:确认代码里的参数名与 Animator 参数完全一致;确认过渡条件配置正确。

动手练习

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

  • 在 Animator 添加 Speed/IsMoving 参数
  • 用代码设置参数驱动动画切换
  • 加平滑过渡让切换更自然

本节小结

输入与动画联动已实现。下一课学 UI 按钮点击响应。

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

← 上一课CharacterController 角色控制器