【Unity基础】对比OnCollisionEnter与OnTriggerEnter
在Unity中,OnCollisionEnter
和 OnTriggerEnter
是两种用于处理碰撞的回调函数,但它们的工作方式和使用场景有所不同:
1. OnCollisionEnter
- 触发条件:当一个带有 Collider 组件并且**未勾选“Is Trigger”**的物体,与另一个带有 Collider 且 Rigidbody 的物体发生碰撞时,会触发
OnCollisionEnter
。 - 传入参数:此函数接收一个
Collision
类型的参数,包含了碰撞对象的详细信息(如碰撞点、力的方向等)。 - 用途:
OnCollisionEnter
多用于处理实际物理碰撞,比如角色与地面的接触,或者物体之间的冲撞效果等。 - 要求:至少一个物体需要有 Rigidbody,且两个碰撞的物体的 Collider 都不能是 Trigger。
示例代码:
void OnCollisionEnter(Collision collision) {
Debug.Log("物体发生了碰撞: " + collision.gameObject.name);
}
2. OnTriggerEnter
- 触发条件:当一个**勾选了“Is Trigger”**的 Collider,与另一个 Collider 发生重叠时,会触发
OnTriggerEnter
。 - 传入参数:此函数接收一个
Collider
类型的参数,提供与触发器发生接触的对象信息。 - 用途:
OnTriggerEnter
通常用于检测区域性触发,比如检测角色进入特定区域、拾取道具、触发机关等情况。 - 要求:通常至少一个物体有 Rigidbody,并且需要勾选 “Is Trigger”。
示例代码:
void OnTriggerEnter(Collider other) {
Debug.Log("物体进入触发器区域: " + other.gameObject.name);
}
总结
- OnCollisionEnter 用于检测实际物理碰撞,而 OnTriggerEnter 用于检测触发区域的进入。
- OnCollisionEnter 使用时,不应勾选 Collider 的 Is Trigger,而 OnTriggerEnter 则需要勾选 Is Trigger。
OnCollisionEnter
提供Collision
对象信息,而OnTriggerEnter
提供Collider
对象信息。