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

3D 环境交互(物理环境)

环境交互完成。下一课做 3D 动画进阶。

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

🎯本节学习目标

  • 实现推箱子
  • 实现可破坏物
  • 实现物理机关

🚀课程导读

箱子能推、花瓶能碎、桥能晃——物理环境交互让场景“可信”。本课实现。

推箱子与可推动物

角色推得动。

  1. 【推箱子】箱子加 Rigidbody(质量适中,如 2-5)+ BoxCollider。
  2. 角色用 CharacterController 推:物理自动处理(角色碰到箱子推动它)。
  3. 【问题】CharacterController 推刚体效果弱——需要专门处理:
  4. 用“推力”:角色移动时检测前方物体是“可推”,给物体施加力。
  5. 【简单方案】箱子质量小(1-2)+ 角色碰撞推动(自动有效)。
  6. 【物理材质】箱子材质 Friction 低(推得动)。
  7. 【可推动物】椅子、木桶:加刚体即可被推动。
  8. 【注意】大物体(保险箱)质量大推不动(合理的物理)。
  9. 【测试】角色推箱子移动、箱子撞墙停。
  10. 【完成】“推得动”了!
💡
推箱子 = 刚体 + 合适质量 + 低摩擦。物理自动处理。

可破坏物与机关

打碎、踩下、吊起。

  1. 【可破坏物】花瓶/箱子带 hp:
  2. public int hp = 1;
  3. public void TakeDamage(int dmg) {
  4. hp -= dmg;
  5. if (hp <= 0) Break();
  6. }
  7. void Break() {
  8. // 碎片特效+音效+掉落物
  9. ObjectPool.Instance.GetDebris(transform.position);
  10. AudioManager.Instance.PlaySFX(breakSound);
  11. Instantiate(dropItem, transform.position, Quaternion.identity);
  12. Destroy(gameObject);
  13. }
  14. 【碎片】用粒子或几块小几何体模拟碎片。
  15. 【物理按键】压力板:触发器检测重量(玩家或箱子):
  16. void OnTriggerStay(Collider o) { if (o.CompareTag("Player") || o.CompareTag("Box")) activated = true; }
  17. 【吊桥】桥板用 HingeJoint 连接(第 233 课),踩上会晃/放平。
  18. 【联动】可破坏物触发机关(打碎罐子出钥匙)。
  19. 【测试】打碎花瓶、踩板开门、桥会晃。
  20. 【完成】场景“处处有戏”!
环境交互 = 可破坏(hp+碎片)+ 物理机关(压力/铰链)+ 联动。组合无穷。

常见错误与排查

错误:箱子推不动?
原因:质量太大或摩擦太大
解决:箱子质量设小;物理材质 Friction 调低;角色速度够。

动手练习

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

  • 做可推箱子
  • 做可破坏花瓶与掉落物
  • 做压力板联动门

本节小结

环境交互完成。下一课做 3D 动画进阶。

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

← 上一课3D 门与开关机制