【Unity】『当たり判定』の設定方法を詳しく解説!

本日のテーマ

物体と物体の接触を検知するための
『当たり判定』の設定方法

 
Unityで物体と物体の「当たり判定」を行うために、

OnCollisionEnterやOnCollisionEnter2Dといった関数をスクリプトに書いてみたが、

なぜか、その中に処理が入ってこない。そんなときの対処法を交えながら、

Unityにおける『当たり判定』のための設定を解説していきます。

 

 

『当たり判定』とは

当たり判定」とは接触判定や衝突判定など、いろいろな呼ばれ方がされますが、

読んで字のごとく、「物体と物体が衝突したかどうかを判定する仕組み」のことです。
 
キャラクター同士の衝突、プレイヤーと壁との衝突、弾と敵との衝突などなど、

物理的な接触」が起こったときに発生するものが「当たり」であり、

物体同士が物理的に接触したかどうかを判定することを「当たり判定」といいます。

 

『当たり判定』が行われる条件

接触する2つのオブジェクトにおいて、

Point

・少なくとも一方にRigidbody(あるいはRigidbody2D)がアタッチされていること

・両方にCollider(例えばBoxColliderやBoxCollider2D)がアタッチされていること

・両方のColliderの『Is Trigger』がfalse(チェックなし)であること

以上3点が「当たり判定」を行うための最低条件となります。

 

Rigidbodyはどちらか一方のオブジェクトについていればOKです。

「Is Trigger」をfalseにしたColliderが、

両方』のオブジェクトについている必要があります。

 

『当たり判定』発生時の処理

接触した時に何かしら実行したい場合には、

スクリプトに

上記を参考に必要な関数と処理を書いて、

そのスクリプトを「当たり判定」を行うオブジェクトにアタッチしてください。

 

Rigidbodyの有無に関わらず、

接触が発生すれば、その両方のオブジェクトで上記の関数が呼び出されるため、

処理を行いたいオブジェクトにスクリプトをアタッチしていただいて結構です。

もちろん接触するオブジェクト以外にスクリプトをアタッチしても意味がないですよ。

 

『当たり判定』の2Dと3Dの違い

2Dで「当たり判定」を行う場合には、

Rigidbody2D、BoxCollider2D、OnCollisionEnter2Dと最後に2Dが付いたものを使用。

逆に3Dで「当たり判定」を行う場合には、2Dのついていないものを使用します。

間違えないようにしてください。

 

『当たり判定』設定のまとめ

当たり判定」の設定方法をまとめると、

・少なくとも一方のオブジェクトにRigidbodyがアタッチされていること

・両方のオブジェクトにColliderがアタッチされ、Is Triggerがfalseであること

・必要なら、スクリプトをアタッチする

です。

設定してもうまくいかない場合には、こちらの記事でチェックしてみてください。
⇒ 当たり判定がうまくいかないときにチェックすべき10のポイント

 

 

以上で「当たり判定」の解説を終わりますが、

『当たり判定』と似たものに『トリガー』というものがあります。

「当たり判定」と「トリガー」は非常に似た処理となっているため、

間違えないようしっかりと使い分けるようにしてください。

「トリガー」の設定方法を知りたい方へ
⇒ 『トリガー』の設定方法を詳しく解説!
 
「当たり判定」と「トリガー」の違いを詳しく知りたい方へ
⇒ 『Collider』をマスター!

 

以上で、『当たり判定』の設定方法を詳しく解説!の説明を終わります。