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

3D 角色移动与动画整合

3D 角色动画整合完成。下一课做 3D 相机旋转控制。

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

🎯本节学习目标

  • 整合控制与动画
  • 用参数驱动动画
  • 处理跳跃动画

🚀课程导读

3D 角色“会走”还要“会表演”:速度参数驱动走路/跑步,跳跃对应动画。本课整合。

整合移动与动画

速度参数驱动。

  1. 【准备】角色模型(Humanoid + 动画,第 138 课)+ Animator 控制器(第 130-133 课)。
  2. 【控制器】状态:Idle、Move(Blend Tree,第 134 课)、Jump、Fall。
  3. 【参数】Speed(Float)、IsGrounded(Bool)。
  4. 【代码整合】在移动脚本里:
  5. float speed = new Vector3(cc.velocity.x, 0, cc.velocity.z).magnitude;
  6. anim.SetFloat("Speed", speed, 0.1f, Time.deltaTime);
  7. anim.SetBool("IsGrounded", cc.isGrounded);
  8. 【动画参数】Speed>0.1 → Move 状态(Blend Tree 里速度 0-1 融合待机/走路/跑步)。
  9. 【跳跃动画】isGrounded=false 时切 Jump。
  10. 【说明】velocity 取水平分量计算速度。
  11. 【注意】动画参数名与控制器一致(第 132 课坑)。
  12. 【测试】移动时角色走路/跑步,停下待机。
  13. 【完成】角色“表演”跟上操作了!
💡
动画整合 = SetFloat(Speed) + SetBool(IsGrounded)。两个参数驱动一切。

Root Motion 与方向

动作“带着走”。

  1. 【Root Motion】部分动画自带位移(跑步):勾选 Animator 的 Apply Root Motion 时,位移由动画驱动(第 140 课)。
  2. 【选择】
  3. 代码移动:不勾 Root Motion(角色位置完全代码控制)。
  4. 动画移动:勾 Root Motion(配合 Blend Tree 速度)。
  5. 【混合】常用:移动代码控制 + 动画播放走路,两者一致即可。
  6. 【角色朝向】移动时旋转朝向(第 228 课 Slerp)。
  7. 【跳跃物理】跳跃用 y 速度(第 227 课),动画只管姿势。
  8. 【落地过渡】落地动画切回 Idle(第 133 课 Has Exit Time)。
  9. 【测试】走/跑/跳全程动画自然、位置正确。
  10. 【注意】Root Motion 与代码位移二选一,别叠加。
  11. 【完成】3D 角色“人模人样”了!
决定“谁动角色”:Root Motion 动画动 or 代码动。选一个,别混。

常见错误与排查

错误:动画与移动脱节(滑步)?
原因:速度参数与真实移动速度不匹配
解决:Blend Tree 的阈值对应真实速度;或调 moveSpeed 匹配动画节奏。

动手练习

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

  • 整合速度参数驱动走路/跑步
  • 实现跳跃动画切换
  • 处理 Root Motion 与代码位移

本节小结

3D 角色动画整合完成。下一课做 3D 相机旋转控制。

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

← 上一课第三人称控制器 TPS