どーも、ぐるたか@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での衝突判定の参考になれば幸いです。


コメントを残す