衝突イベントの特徴

初めに

RiG++のコーディング課リーダーのしゅうまです。今回は、わかりずらい衝突判定の関数についてまとめました。

基本的な説明

unityでゲーム制作をしているとオブジェクトの衝突を検知したくなることがよくあります。そこで登場するのが衝突イベントです。

イベント一覧

  • 3D
    • OnCollisionEnter
    • OnCollisionStay
    • OnCollisionExit
    • OnTriggerEnter
    • OnTriggerStay
    • OnTriggerExit
  • 2D
    • OnCollisionEnter2D
    • OnCollisionStay2D
    • OnCollisionExit2D
    • OnTriggerEnter2D
    • OnTriggerStay2D
    • OnTriggerExit2D

関数名にCollisionが入っているとコライダー同士がぶつかったときに呼ばれ、Triggerが入っているとトリガーがぶつかったときに呼ばれます。

コライダートリガー
コライダーOnCollisionOnTrigger
トリガーOnTriggerOnTrigger
コライダーのタイプごとの呼ばれるイベント
イベントタイプ呼ばれるタイミング
Enterぶつかった瞬間に一度だけ
Stayぶつかっている間ずっと
Exit離れる瞬間に一度だけ
イベントが呼ばれるタイミング

これらのイベントは、どちらか一方にRigidbodyがついている必要があります。よく付け忘れるので注意しましょう。

特徴

この関数は、子オブジェクトがかかわると呼ばれるタイミングが複雑になります。呼ばれるかどうかを以下の表にまとめておきます。すべてのオブジェクトに関数を書いたスクリプトをつけて1行目のオブジェクトの関数が呼ばれるかを表しています。

スクリプトをつけたオブジェクトRigidbodyがついたオブジェクトRigidbodyがついていないオブジェクト Rigidbodyがついたオブジェクト の子オブジェクト Rigidbodyがついていないオブジェクトの子オブジェクトそのほかのオブジェクト
Rigidbodyがついたオブジェクト
Rigidbodyがついていないオブジェクト
Rigidbodyがついたオブジェクト の子オブジェクト
Rigidbodyがついていないオブジェクト の子オブジェクト
そのほかのオブジェクト

Rigidbodyをつけたオブジェクトは、子オブジェクトがぶつかったときにも衝突イベントを呼ぶことができます。逆にRigidbodyがついていないと子オブジェクトの衝突を検知することはできません。

終わりに

今回の記事は、昔自分が困ったことを書いてみました。すこしでも参考になれば幸いです。

コメントを残す

CAPTCHA