衝突イベントの特徴
初めに
RiG++のコーディング課リーダーのしゅうまです。今回は、わかりずらい衝突判定の関数についてまとめました。
基本的な説明
unityでゲーム制作をしているとオブジェクトの衝突を検知したくなることがよくあります。そこで登場するのが衝突イベントです。
イベント一覧
- 3D
- OnCollisionEnter
- OnCollisionStay
- OnCollisionExit
- OnTriggerEnter
- OnTriggerStay
- OnTriggerExit
- 2D
- OnCollisionEnter2D
- OnCollisionStay2D
- OnCollisionExit2D
- OnTriggerEnter2D
- OnTriggerStay2D
- OnTriggerExit2D
関数名にCollisionが入っているとコライダー同士がぶつかったときに呼ばれ、Triggerが入っているとトリガーがぶつかったときに呼ばれます。
コライダー | トリガー | |
コライダー | OnCollision | OnTrigger |
トリガー | OnTrigger | OnTrigger |
イベントタイプ | 呼ばれるタイミング |
Enter | ぶつかった瞬間に一度だけ |
Stay | ぶつかっている間ずっと |
Exit | 離れる瞬間に一度だけ |
これらのイベントは、どちらか一方にRigidbodyがついている必要があります。よく付け忘れるので注意しましょう。
特徴
この関数は、子オブジェクトがかかわると呼ばれるタイミングが複雑になります。呼ばれるかどうかを以下の表にまとめておきます。すべてのオブジェクトに関数を書いたスクリプトをつけて1行目のオブジェクトの関数が呼ばれるかを表しています。
スクリプトをつけたオブジェクト | Rigidbodyがついたオブジェクト | Rigidbodyがついていないオブジェクト | Rigidbodyがついたオブジェクト の子オブジェクト | Rigidbodyがついていないオブジェクトの子オブジェクト | そのほかのオブジェクト |
Rigidbodyがついたオブジェクト | 〇 | 〇 | 〇 | 〇 | 〇 |
Rigidbodyがついていないオブジェクト | 〇 | ✕ | 〇 | ✕ | ✕ |
Rigidbodyがついたオブジェクト の子オブジェクト | 〇 | ✕ | 〇 | 〇 | 〇 |
Rigidbodyがついていないオブジェクト の子オブジェクト | 〇 | ✕ | ✕ | ✕ | ✕ |
そのほかのオブジェクト | 〇 | ✕ | 〇 | ✕ | ✕ |
Rigidbodyをつけたオブジェクトは、子オブジェクトがぶつかったときにも衝突イベントを呼ぶことができます。逆にRigidbodyがついていないと子オブジェクトの衝突を検知することはできません。
終わりに
今回の記事は、昔自分が困ったことを書いてみました。すこしでも参考になれば幸いです。