
接触や衝突の判定には大きく2つ、 OnCollisionEnter ()【オンコリジョンエンター】かOnTriggerEnter()【オントリガーエンター】 のどちらかを利用できる。以下にそれぞれの特徴をまとめる。
また、その他のUnityに関する記事は【Unity】サイト内Tips記事リンクまとめにまとめてある。
Collision | Trigger | |
Colliderコンポーネント | 必要 | 必要 |
Rigidbodyコンポーネント | どちらかに必要 | どちらかに必要 |
is Trigger | どちらも無効 | どちらかを有効 |
取得できる情報 | Collision | Collider |
物理的影響 | 影響あり | 影響なし |
これらはStart()【スタート】関数やUpdate()【アップデート】関数と別で宣言して利用する関数で、判定が起こったときに中に記述した処理を実行する。Enterの他にStay【ステイ】、Exit【イグジット】なども利用できる。それぞれの判定をまとめると以下の通り。
Enter | 接触した瞬間のみ |
Stay | 接触している間常に |
Exit | 離れた瞬間のみ |
使い分けとしては物理的影響の有無が大きい。具体的な例を出せば、
・着地しているときにダメージを与えたい→OnCollisionStay()
・自動ドアのセンサのように侵入を検知したい→OnTriggerEnter()
などがイメージしやすい。
また、どちらも取得した情報からGameObjectを取得することができる。以下にそのサンプルを示す。
void OnCollisionEnter(Collision nantara){
Debug.Log(nantara.gameObject.name); //接触したオブジェクトの名前情報を表示
}
void OnTriggerEnter(Collider nantara){
Debug.Log(nantara.gameObject.name); //接触したオブジェクトの名前情報を表示
}