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

布娃娃 Ragdoll

布娃娃已掌握。下一课综合练习:角色动画状态机。

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

🎯本节学习目标

  • 理解布娃娃原理
  • 创建布娃娃
  • 实现死亡触发布娃娃

🚀课程导读

角色中弹后“瘫软倒地”——布娃娃(Ragdoll)把角色的骨骼变成物理关节,失去控制时自然倒下。

布娃娃原理

“让骨骼变成物理摆”。

  1. 【原理】把角色各骨骼(头、四肢)变成“刚体+碰撞体+关节”,由物理模拟控制。
  2. 【正常时】Animator 控制骨骼,布娃娃禁用;死亡时启用布娃娃,物理接管。
  3. 【效果】中弹/爆炸后角色“瘫倒”,四肢自然摆动,很真实。
  4. 【制作方式】Unity 提供自动生成器:GameObject → 3D Object → Ragdoll...,按提示指定骨骼即可生成。
  5. 【组成部分】每段骨骼:Rigidbody + Capsule/Box Collider + Character Joint。
  6. 【骨骼映射】需要 Humanoid 模型并正确配置 Avatar。
  7. 【注意】布娃娃较耗性能,只给“会死”的重要角色用。
💡
布娃娃 = 把“演员”的骨头换成“物理玩偶”,动画不管时物理接管。

创建与触发布娃娃

三步接入。

  1. 【自动生成】把带 Humanoid 的模型放入场景,选中后菜单 GameObject → 3D Object → Ragdoll...。
  2. 在弹出的窗口里,把模型的各骨骼对象拖到对应槽(Pelvis 骨盆、Left Hips 左大腿...)。
  3. 点击【Create】,Unity 自动给骨骼添加刚体/碰撞体/关节。
  4. 【默认状态】生成后角色会瘫倒(因为布娃娃激活了)——我们要先“禁用布娃娃”。
  5. 【禁用】把所有布娃娃的 Rigidbody 设为 isKinematic(或挂脚本统一管理),让动画恢复控制。
  6. 【死亡触发】脚本里写:
  7. public RagdollController ragdoll;
  8. void Die() { ragdoll.Activate(); /* 停掉 Animator */ anim.enabled = false; }
  9. 【Activate 实现】遍历所有布娃娃 Rigidbody:rb.isKinematic = false; rb.useGravity = true;
  10. 【复活】反向设置 isKinematic = true + 启用 Animator + 复位 Transform。
  11. 【注意】触发时先停 Animator 再激活布娃娃,避免动画与物理抢骨骼。
  12. 【调试】用“骨撞声”等物理材质配合更真实。
布娃娃接入 = 生成器生成 → 默认禁用 → 死亡时激活并停 Animator。

常见错误与排查

错误:角色一进场景就瘫倒?
原因:布娃娃默认激活
解决:脚本在 Start 里把所有 Rigidbody 设为 isKinematic,让动画接管;死亡时再激活。

动手练习

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

  • 用生成器给角色创建布娃娃
  • 实现“死亡时激活布娃娃”
  • (进阶)实现复活与动画恢复

本节小结

布娃娃已掌握。下一课综合练习:角色动画状态机。

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

← 上一课IK 反向动力学