Colliderの接触検出イベントにはOnCollisionEnterとOnTriggerEnterの2種類があります。その2つの違いを簡単にまとめてみます。
Table of Contents
OnCollisionEnter
IsTriggerがOFFのCollider同士が接触したときに発生するイベント。
IsTriggerはデフォルトがOFFなので、設定しなければこちらが発生します。
OnCollisionStay:Collider同士が接触し続けているときに発生するイベント。
OnCollisionExit : Collider同士が 触れ合うのをやめたときに発生するイベント。
Collider同士の距離が、Default Contact Offset以下になると、接触したと判定されれます。この値は、[ProjectSettings]→[Physics]→[Default Contact Offset]で設定できます。
OnTriggerEnter
IsTriggerがONに設定されたColliderに、他のColliderが接触したときに発生するイベント。IsTriggerがONに設定されたColliderは、衝突判定が消え他のColliderをすり抜けるようになります。自動ドアのセンサー、廊下のある地点を通過するとガラスが割れる、などイベント発生のトリガーに使えます。
IsTriggerをONにしたCollider同士でもイベントが発生します。
OnTriggerStay:Collider同士が接触し続けているときに発生するイベント。
OnTriggerExit : Collider同士が 触れ合うのをやめたときに発生するイベント。
まとめ
ColliderA IsTrigger | ColliderB IsTrigger | OnCollisionEnter | OnTriggerEnter |
---|---|---|---|
OFF | OFF | A、Bに発生 | × |
ON | OFF | × | A・Bに発生 |
OFF | ON | × | A・Bに発生 |
ON | ON | × | A・Bに発生 |
Unityを使い始めた当時は、OnCollisionEnterの存在を知らず、オブジェクト同士の接触イベントをOnTriggerEnterで取得していました。IsTriggerをONにすると、当然Colliderの衝突判定がなくなります。そこで全く同じ形状のIsTriggerがONのColliderを、無駄にくっつけていたのは、今となってはいい思い出です。