- Unityでの当たり判定の仕組みや作り方がよくわからない
という悩みを解決します。
この記事では、
- 当たり判定とは
- 当たり判定をするための2つのモード
- Collisionモードの説明(条件、メソッド)
- Triggerモードの説明(条件、メソッド)
また2Dでも3Dでも当たり判定の基本は同じです。
当たり判定とはオブジェクト同士が衝突したかどう検出する仕組み
当たり判定は「オブジェクト同士が衝突したか検出する仕組み」です。当たり判定がなければ、オブジェクトは当たったときの処理を実行できません。
オブジェクト同士が衝突したときに発生するのが「当たり」と考えてください。その衝突したのか検出する(判断)することを「当たり判定」とです。
当たり判断があることによって、衝突後にオブジェクトを破壊する、オブジェクトを移動ささせるなどの処理を設定できます。
当たり判定を作るには2つの方法がある
そんなオブジェクト同士の衝突を検出してくれる「当たり判定」を作る2つの方法があります。
- 【スクリプト】
- 【Physics】
この2つの方法で当たり判定を作成することができます。
①の【スクリプト】を使って当たり判定を行う方法は、オブジェクト同士の距離が◯以下になったらと設定して当たり判定を行う方法です。
②の【Physics】はスクリプトを基本使うことなく当たり判定を作ることができます。非常に簡単です。この記事では【Physics】を使って当たり判定を作成していきます。
【Physics】を使った当たり判定にはCollisionモードとTriggerモードがある
- Collisionモード
- Triggerモード
この2つのモードがあります。
Collisionモード
Collisionモードとは
Collisionモードだと物理的な当たり判定で、オブジェクト同士がぶつかり、衝突検出+衝突応答も実行されます。青い物体にボールを白いぶつけています。
衝突検出
→オブジェクトとぶつかったことを検出(または青い柱とぶつかったことを検出)
衝突応答(衝突したあと)
→ボールと柱がぶつかったことにより、動いている
です。
Collisionモードを使うための条件やColliderモードのときにだけ使えるメソッドがあります。
Collisionモードを使う条件
- 判定したいオブジェクトすべてにColliderコンポーネントがアタッチされている
- 判定したいオブジェクトすべてにRigidbody(またはRigidbody2D)コンポーネントがアタッチされている
- 判定したいオブジェクトすべてのColliderの【Is Trigger】がfalse(チェックなし)である
判定したいオブジェクトが上の条件を満たしていなければ、Collisionモードを使うことができません。
Rigidbodyコンポーネントといっていますが、2Dの場合でいうRigidbody2Dを表しています。
Collisionモードで使えるメソッド
2Dで使えるメソッド
OnCollisionEnter2D | 接触したときに呼び出される |
OnCollisionStay2D | 接触している間呼び出される |
OnCollisionExit2D | 接触して、離れた瞬間に呼び出される |
これらです。
3Dで使えるメソッド
OnCollisionEnter | 接触したときに呼び出される |
OnCollisionStay | 接触している間、呼び出される |
OnCollisionExit | 接触して、離れた瞬間に呼び出される |
これらです。
Collisionモードについてもっと深く知るにはこちら
こちらの【Unity】当たり判定【Collision】モードの設定方法、メソッドの使い方で説明しています。
Triggerモード
Triggerモードとは
Triggerモードだとは検出だけ行い、あとはすり抜けます。ボールが他のオブジェクトに衝突したという検出は受け取りますが、物理的衝突しません。
Triggerモードを使う条件
- 判定したいオブジェクトすべてにColliderコンポーネントがアタッチされている
- 判定したいオブジェクトの最低限一方にRigidbody(またはRigidbody2D)コンポーネントがアタッチされている
- 判定したいオブジェクトの最低限一方のColliderの【Is Trigger】がtrue(チェックあり)である
判定したいオブジェクトが上の条件を満たしていなければ、Triggerモードを使うことができません。
Rigidbodyコンポーネントといっていますが、2Dの場合でいうRigidbody2Dを表しています。
Triggerモードで使えるメソッド
2Dで使えるメソッド
OnTriggerEnter2D | トリガーに接触したときに呼び出される |
OnTriggerStay2D | トリガーに接触している間呼び出される |
OnTriggerExit2D | トリガーに接触して、離れた瞬間に呼び出される |
これらです。
まあトリガーっていってますけど、オブジェクト同士が接触したときって発想で良いです。厳密には違いますが、わかりやすい方が良いもんね。
3Dで使えるメソッド
OnTriggerEnter | トリガーに接触したときに呼び出される |
OnTriggerStay | トリガーに接触している間、呼び出される |
OnTriggerExit | トリガーに接触して、離れた瞬間に呼び出される |
これらです。
Triggerモードをもっと詳しく知るにはこちら
【Unity】当たり判定【Trigger(トリガー)】モードの設定方法、メソッドの使い方をご覧ください。
まとめ
- 当たり判定は【スクリプト】か【Physics】で作ることができる
- 【Physics】を使った当たり判定にはCollisionモードとTriggerモードがある
●Collisionモードを使う条件
- 判定したいオブジェクトすべてにColliderコンポーネントがアタッチされている
- 判定したいオブジェクトすべてにRigidbodyコンポーネントがアタッチされている
- 判定したいオブジェクトすべてのColliderの【Is Trigger】がfalse(チェックなし)である
OnCollisionEnter2D | 接触したときに呼び出される |
OnCollisionStay2D | 接触している間呼び出される |
OnCollisionExit2D | 接触して、離れた瞬間に呼び出される |
OnCollisionEnter | 接触したときに呼び出される |
OnCollisionStay | 接触している間、呼び出される |
OnCollisionExit | 接触して、離れた瞬間に呼び出される |
●Triggerモードを使う条件
- 判定したいオブジェクトすべてにColliderコンポーネントがアタッチされている
- 判定したいオブジェクトの最低限一方にRigidbodyコンポーネントがアタッチされている
- 判定したいオブジェクトの最低限一方のColliderの【Is Trigger】がtrue(チェックあり)である
OnTriggerEnter2D | トリガーに接触したときに呼び出される |
OnTriggerStay2D | トリガーに接触している間呼び出される |
OnTriggerExit2D | トリガーに接触して、離れた瞬間に呼び出される |
OnTriggerEnter | トリガーに接触したときに呼び出される |
OnTriggerStay | トリガーに接触している間、呼び出される |
OnTriggerExit | トリガーに接触して、離れた瞬間に呼び出される |
まとめが長い。すまない。
さぎのみや(@saginomiya8)でした。
コメント