






















在 Unity 2D 中,OnCollisionEnter2D 和 OnTriggerEnter2D 是两种不同的碰撞检测回调方法,它们的主要区别在于物理响应和触发条件。
| 特性 | OnCollisionEnter2D | OnTriggerEnter2D |
|---|---|---|
| 物理效果 | ✅ 有物理碰撞(反弹、摩擦等) | ❌ 无物理碰撞(直接穿透) |
| 碰撞体类型 | 必须勾选 Is Trigger = false |
必须勾选 Is Trigger = true |
| 相互穿透 | 不会穿透,会被推开 | 可以穿透(无物理阻挡) |
| 适用场景 | 物理碰撞、物体互动 | 区域检测、事件触发 |
// 物理碰撞 - 提供碰撞详细信息 void OnCollisionEnter2D(Collision2D collision) { // 可以获取碰撞点、法线、相对速度等物理信息 Vector2 contactPoint = collision.contacts[0].point; float impactForce = collision.relativeVelocity.magnitude; } // 触发器 - 仅提供碰撞体引用 void OnTriggerEnter2D(Collider2D other) { // 只能获取进入触发器的碰撞体,无物理细节 // 常用于检测是否进入某个区域 }
// 物理碰撞示例 public class Player : MonoBehaviour { void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Enemy")) { // 根据碰撞力度计算伤害 float damage = collision.relativeVelocity.magnitude * 10; HP -= damage; } } } // 触发器示例 public class Coin : MonoBehaviour { void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) { // 拾取金币,无需物理效果 ScoreManager.AddCoin(1); Destroy(gameObject); } } }
要触发回调,两个物体必须满足:
| 物体A | 物体B | 结果 |
|---|---|---|
| 普通碰撞体 | 普通碰撞体 | ✅ 触发 OnCollisionEnter2D + 物理效果 |
| 触发器 | 普通碰撞体 | ✅ 触发 OnTriggerEnter2D |
| 触发器 | 触发器 | ✅ 触发 OnTriggerEnter2D |
| 普通碰撞体 | 普通碰撞体(无Rigidbody) | ❌ 不触发任何回调 |
OnCollisionEnter2DOnTriggerEnter2D记住:Trigger 让物体像幽灵一样穿过,Collision 让物体像实体一样碰撞。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。