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

3D 角色布娃娃实战

布娃娃实战完成。下一课做 3D 物理破碎。

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

🎯本节学习目标

  • 实现死亡布娃娃
  • 实现动画切物理
  • 实现复活

🚀课程导读

第 144 课学布娃娃原理,本课实战:角色死亡“瘫倒”、复活“站起”。

死亡布娃娃

倒下的一瞬。

  1. 【结构】角色模型下挂布娃娃控制器脚本(第 144 课生成器 + 禁用逻辑)。
  2. 【RagdollController】
  3. public class RagdollController : MonoBehaviour {
  4. private Rigidbody[] rigidbodies;
  5. private Animator anim;
  6. void Awake() {
  7. rigidbodies = GetComponentsInChildren<Rigidbody>();
  8. anim = GetComponent<Animator>();
  9. SetRagdoll(false);
  10. }
  11. public void Activate() { SetRagdoll(true); anim.enabled = false; }
  12. public void Deactivate() { SetRagdoll(false); anim.enabled = true; }
  13. void SetRagdoll(bool active) {
  14. foreach (var rb in rigidbodies) { rb.isKinematic = !active; }
  15. }
  16. }
  17. 【死亡】角色 hp<=0 时:ragdoll.Activate();
  18. 【效果】角色“瘫倒”,物理接管,四肢自然下垂。
  19. 【注意】激活前把角色从控制器/交互中移除(禁脚本)。
  20. 【测试】打死敌人,尸体瘫倒。
  21. 【完成】“死得真实”。
  22. 【说明】头部/骨盆等大骨要 isKinematic 保结构(可选)。
💡
死亡布娃娃 = 关 Animator + 开刚体。一关一开,尸体“瘫”。

物理力与复活

“被打飞”与“站起来”。

  1. 【击飞】受击时给布娃娃加力:
  2. public void Hit(Vector3 force) {
  3. Activate();
  4. // 给身体各刚体加力
  5. foreach (var rb in rigidbodies) rb.AddForce(force, ForceMode.Impulse);
  6. }
  7. 【效果】角色被炸飞、四肢乱舞(动作游戏高光时刻)。
  8. 【延迟复活】敌人死后延时销毁:Destroy(gameObject, 3f);
  9. 【玩家复活】死亡后:
  10. RagdollController.Instance.Deactivate(); // 关布娃娃
  11. transform.position = spawnPoint.position; // 复位
  12. anim.Play("Idle");
  13. 【注意】复活前要复位位置/旋转(否则“鬼畜”)。
  14. 【复位】把角色 Transform 复位到重生点再 Deactivate。
  15. 【测试】击飞敌人、玩家死后复活。
  16. 【完成】布娃娃玩法完整!
  17. 【注意】布娃娃很耗性能,只给重要角色(玩家/精英怪)用。
  18. 【优化】远处敌人不用布娃娃(距离判断)。
布娃娃玩法 = 死亡瘫倒 + 受击加力 + 复位复活。三种“剧本”全覆盖。

常见错误与排查

错误:复活后角色姿势错乱?
原因:没复位或 Animator 没恢复
解决:复活时先复位 Transform 到重生点,再 Deactivate + anim.Play("Idle")。

动手练习

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

  • 实现死亡瘫倒
  • 实现受击击飞加力
  • 实现玩家死亡复活

本节小结

布娃娃实战完成。下一课做 3D 物理破碎。

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

← 上一课3D 角色换装系统