首页/ 第 7 章 · 物理系统/ 第 96 课
LESSON 96 · 物理系统

触发器 Trigger 与碰撞事件

触发与碰撞事件已掌握。下一课学刚体的 Sleep 与约束。

⏱ 约 16 分钟📊 难度:入门🗂 第 7 章 · 物理系统📍 第 96 / 300 课
课程进度
96 / 300

🎯本节学习目标

  • 理解触发与碰撞的区别
  • 掌握两个事件系列
  • 实现进入区域检测

🚀课程导读

“玩家踩到金币”“敌人碰到玩家扣血”“走进区域触发剧情”——全靠触发与碰撞事件。这是游戏交互的核心。

碰撞与触发的区别

“挡”与“穿”。

  1. 【碰撞 Collision】碰撞体未勾 Is Trigger:物理阻挡,物体撞上会停下/反弹。回调方法:OnCollisionEnter / Stay / Exit。
  2. 【触发 Trigger】碰撞体勾选 Is Trigger:不阻挡、穿透,只“报告”进入了区域。回调方法:OnTriggerEnter / Stay / Exit。
  3. 【触发要求】触发双方至少一方带刚体(通常动态物体带刚体,触发区不带)。
  4. 【事件参数】OnTriggerEnter(Collider other):other 是“进入者”的碰撞体;通过 other.gameObject 拿对象、other.tag 判断身份。
  5. 【碰撞事件】OnCollisionEnter(Collision collision):collision 有 contact 点、相对速度等详细信息。
  6. 【命名】OnCollisionEnter/Stay/Exit 与 OnTriggerEnter/Stay/Exit,别写错(Collision vs Trigger)。
💡
判断“是否碰到了”用碰撞;判断“是否进入了区域/道具范围”用触发。

实战:金币收集与陷阱

用触发实现金币与伤害。

  1. 【金币】创建 Sphere 命名为 Coin,缩小、加金色材质,勾选 Sphere Collider 的 Is Trigger,旋转让金字样自然。
  2. 给 Coin 加脚本:
  3. void OnTriggerEnter(Collider other) { if (other.CompareTag("Player")) { Debug.Log("金币+1"); Destroy(gameObject); } }
  4. 给玩家 Cube 加 Tag “Player”(第 78 课)。
  5. 播放:控制玩家靠近金币,进入区域即触发,金币消失!
  6. 【陷阱区域】创建一个 Cube 拉大压扁,勾选 Is Trigger,挂脚本:OnTriggerEnter 时 other 是玩家则扣血。
  7. 【持续伤害】用 OnTriggerStay(每帧都触发)实现“站在火里持续掉血”,注意用时间间隔控制。
  8. 【离开区域】OnTriggerExit 实现“离开安全区”。
  9. 【碰撞销毁】子弹用 OnCollisionEnter 撞到墙就 Destroy(第 77 课)。
触发事件三件套:Enter 进入、Stay 停留、Exit 离开;配合 Tag 判断对象身份。

常见错误与排查

错误:OnTriggerEnter 没触发?
原因:双方都没刚体,或触发器没勾 Is Trigger
解决:确认动态对象有 Rigidbody;触发器勾选 Is Trigger;检查方法名拼写。

动手练习

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

  • 做一个金币收集系统(触发)
  • 做一个持续伤害的陷阱区域(OnTriggerStay)
  • 用 OnCollisionEnter 让子弹撞墙销毁

本节小结

触发与碰撞事件已掌握。下一课学刚体的 Sleep 与约束。

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

← 上一课扭矩与角速度 Torque