どーも、ぐるたか@guru_takaです。
Unityで衝突判定したいとき、いつもググっているなぁ…と思い、いちど整理することにしました。
MEMO
Unityのバージョンは2018.3です。衝突判定の種類
Unityの衝突判定には2種類あります。具体的には
- Collision:オブジェクト同士がぶつかった時
- Triger:オブジェクト同士がぶつからずに触れている時
です。
前者は一般的な物体同士の検出です。後者はゴールに到着したら判定する時などに使用します。
CollisionとTriggerの関数
CollisionとTriggerで使う関数は以下の通りです!
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ColisionDetecter : MonoBehaviour { ///////////////////////////////////// ///Collision系 ///////////////////////////////////// //オブジェクトが衝突した瞬間 void OnCollisionEnter(Collision other) { } //オブジェクト同士が離れた瞬間 void OnCollisionExit(Collision other) { } //オブジェクト同士が接触し続けている間 void OnCollisionStay(Collision other) { } ///////////////////////////////////// ///Trigger系 ///////////////////////////////////// ///オブジェクトが触れた瞬間 void OnTriggerEnter(Collider other) { } //オブジェクトが離れた瞬間 void OnTriggerExit(Collider other) { } //オブジェクト同士が触れ続けている間 void OnTriggerStay(Collider other) { } }
CollisionとTriggerでの衝突検知の条件
衝突検知できる条件でよく混乱してしまうので、まとめてみました!
Collisionでの衝突条件
Component | Scriptがアタッチされた オブジェクト |
衝突されるオブジェクト |
Collider | 必須+『is Trigger』off | 必須+『is Trigger』off |
Rigidbody | 必須+『is Kinematic』off | どちらでもOK |
MEMO
ScriptがアタッチされたオブジェクトにてRigidbody『is Kinematic』ON
をにした場合、衝突されたオブジェクトがRigidbody『is Kinematic』OFF
であれば、Collisionを検出できます!Triggerでの衝突条件
Component | Scriptがアタッチされた オブジェクト |
衝突されるオブジェクト |
Collider | 必須 | 必須 |
Collider 『Is Trigger』 |
どちらかがONであればOK! | |
Rigidbody | どちらかにアタッチしてればOK! |
最後に
以上になります。2Dでの衝突判定では、OnTriggerEnter2D(Collider2D other){}
のように、2Dがつくのでご注意ください!
Unityでの衝突判定の参考になれば幸いです。
コメントを残す