Unityで『当たり判定』がうまくいかない方の
チェックすべき10のポイント
【Unity】『当たり判定』でチェックすべき10のポイント
これで「当たり判定」をマスターしたも同然です。
では、さっそく見ていきましょう。
10のチェックポイント
『Rigidbody』がアタッチされていること
どちらか一方のオブジェクトで良いので「Rigidbody」がアタッチされていることを確認してください。もちろん両方のオブジェクトにアタッチされていても問題ありません。
「当たり判定」と「トリガー」の発生には必須です。
Rigidbodyの「Simulated」にチェックが入っていること(画像1)
Rigidbodyに「Simulated」という項目がありますが、これのチェックが外れていると、物理シミュレーションが行われないので注意してください。
両方のオブジェクトに『Collider』がアタッチされていること
両方のオブジェクトに「Collider」がアタッチされていることを確認してください。
「当たり判定」と「トリガー」の発生には必須です。
「Collider」に関する詳しいことはこちらをご覧ください。
⇒「『Collider』をマスター!」
両方のColliderの『Is Trigger』のチェックが外れていること(画像2)
物理的接触である「当たり判定」を発生させたい場合には、両方のColliderの「Is Trigger」のチェックが外れている必要があります。
逆に、物理的接触がない「トリガー」を発生させたい場合には、少なくとも一方の「Is Trigger」にチェックが入っている必要があります。
「Is Trigger」に関する詳しいことはこちらをご覧ください。
⇒「『Is Trigger』が2つを分かつ!」
Colliderのサイズが適切に設定されていること
Colliderは、Scene画面では緑色の枠(初期設定)で表示されます。適切に設定されていることを確認してください。
Colliderのサイズの設定は、EditColliderをクリックしてScene画面で直接設定する方法と(画像3)、下部のOffsetとSizeに直接数値を入力することにより設定する方法があります。(画像4)
接触を検出するための関数が正しく使用されていること
物理的接触のある「当たり判定」と物理的接触のない「トリガー」では、接触を検出するための関数が異なります。
「当たり判定」では、OnCollisionEnter・OnCollisionStay・OnCollisionExitの『OnCollision』が付いた関数を使い、引数には「Collision」が使われます。
「トリガー」では、OnTriggerEnter・OnTriggerStay・OnTriggerExitの『OnTrigger』が付いた関数を使い、引数には「Collider」が使われます。
「当たり判定」を検知したいのに、「OnTrigger」を使用してしまっていることは多々ありますので、今一度確認してください。
スクリプトが対象オブジェクトにアタッチされていること
「OnCollision」や「OnTrigger」といった関数を利用するために作成したスクリプトは、「当たり判定」あるいは「トリガー」が発生するオブジェクトにアタッチされていないと意味がありません。
まったく関係のないオブジェクトにアタッチしたりしていませんか?
コンポーネントや関数で、2Dと3Dを混同して使用していないこと
2Dでの接触を判定したい場合には、「Rigidbody2D」「BoxCollider2D」「OnCollisionEnter2D」「Collision2D」「Collider2D」といったように後ろに2Dの付いたものを使います。
3Dの場合は、2Dのついていないものを使用します。
2Dと3Dが混在していないか改めて確認してください。
1~7で説明した設定に関しては、以下の記事で詳しく解説しております。
「当たり判定」の設定 ⇒「『当たり判定』の設定方法を詳しく解説!」
「トリガー」の設定 ⇒「『Trigger』の設定方法を詳しく解説!」
『Layer Collision Matrix』の対象項目にチェックが入っていること
Edit > Project Settings > Physics (あるいはPhysics2D)を開き(画像5)、Inspectorに表示された「Layer Collision Matrix」を確認してください。(画像6)ここのチェックが外れている場合、該当する2つのレイヤー間での衝突は発生しません。
自身が設定しているレイヤーを確認してみてください。
それでもうまくいかない場合には、
一度Unityエディタを再起動して確認してみてください。
それでもダメなら、最初からオブジェクトを作り直して設定しなおしてください。
最終手段ですね。
最後は番外編になります。
オブジェクトの速度が速くなったときに、
オブジェクトをすり抜けてしまう「壁抜け」が発生した場合の対処法です。
Rigidbodyの「Collision Detection」を「Continuous」に設定(画像7)
「Collision Detection」に関する詳しいことはこちらをご覧ください。
⇒「オブジェクトが壁をすり抜ける!そんなときの対策」
以上、番外編を含めた「当たり判定」がうまくいかない方がチェックすべき10のポイントでした。
1つのチェックの有無だけで、「当たり判定」が正常に行われなくなります。
チェックポイントを1つ1つ丁寧に確認してください。
必ずや解決への道が開けることでしょう。
これで、『当たり判定』でチェックすべき10のポイントの解説を終わります。