Unityメモ

Unityで学んだことをメモするやつ

OnTriggerEnterとOnCollisionEnterの違い / 衝突判定

物体同士の衝突の判定には、Collider.OnTriggerEnter()Collider.OnCollisionEnter()を使用します。
Unity - スクリプトリファレンス: Collider.OnTriggerEnter(Collider)
Unity - スクリプトリファレンス: Collider.OnCollisionEnter(Collision)

その前に、以下のコンポーネントについて理解しておく必要があります。

◯◯Coliderコンポーネント

衝突判定の形状を設定するコンポーネントです。 f:id:nullkun0803:20180410172843p:plain

isTrigger

isTriggerを設定すると、衝突時に発生する反発効果がなくなります。

RigiBodyコンポーネント

RigiBodyコンポーネントAdd Component > Physicsから追加することができます。

f:id:nullkun0803:20180410172847p:plain

use gravity

重力の計算を取り入れるかどうかを決めます。チェックすると物体に重力が働きます。

is kinematic

チェックをつけると物理演算が無効になります。 チェックを外すと、他の物体が衝突した時にその影響を受けるようになります。

OnTriggerEnter()

OnTriggerEnterで判定する場合は、Coliderコンポーネント内のisTriggerにチェックをつけて置く必要があります。 衝突した時の影響はなくなるので、すり抜ける時に発火します。

void OnTriggerEnter (Collider other) {
    Debug.Log("Hit" + other.gameObject.name);
}

OnCollisionEnter()

OnCollisionEnterは衝突した際の反発がある際に発火するので、Coliderコンポーネント内のisTriggerにチェックは外します。 そして、反発させるためには、判定したいオブジェクトにRigiBodyコンポーネントを追加して置く必要があります。

void OnCollisionEnter (Collision collision) {
    Debug.Log("Hit" + collision.gameObject.name);
}

参考URL
qiita.com