【Unity】当たり判定とは?Colliderが当たり判定には必要

  • Unityでの当たり判定の仕組みや作り方がよくわからない

という悩みを解決します。

この記事では、

  • 当たり判定とは
  • 当たり判定をするための2つのモード
  • Collisionモードの説明(条件、メソッド)
  • Triggerモードの説明(条件、メソッド)

また2Dでも3Dでも当たり判定の基本は同じです。

目次

当たり判定とはオブジェクト同士が衝突したかどう検出する仕組み

当たり判定は「オブジェクト同士が衝突したか検出する仕組み」です。当たり判定がなければ、オブジェクトは当たったときの処理を実行できません。

オブジェクト同士が衝突したときに発生するのが「当たり」と考えてください。その衝突したのか検出する(判断)することを「当たり判定」とです。

当たり判断があることによって、衝突後にオブジェクトを破壊する、オブジェクトを移動ささせるなどの処理を設定できます。

当たり判定を作るには2つの方法がある

そんなオブジェクト同士の衝突を検出してくれる「当たり判定」を作る2つの方法があります。

  1. 【スクリプト】
  2. 【Physics】

この2つの方法で当たり判定を作成することができます。

①の【スクリプト】を使って当たり判定を行う方法は、オブジェクト同士の距離が◯以下になったらと設定して当たり判定を行う方法です。

②の【Physics】はスクリプトを基本使うことなく当たり判定を作ることができます。非常に簡単です。この記事では【Physics】を使って当たり判定を作成していきます。

【Physics】を使った当たり判定にはCollisionモードとTriggerモードがある

  • Collisionモード
  • Triggerモード

この2つのモードがあります。

Collisionモード

Collisionモードとは

UnityでColliderモード

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】モードの設定方法、メソッドの使い方で説明しています。

あわせて読みたい
【Unity】当たり判定【Collision】モードの設定方法、メソッドの使い方 UnityでのCollisionモードを使った当たり判定の使い方を知りたい その悩みを解決します。 この記事では Collisionモードの説明 Collisionモードを使う条件 Collision系...

Triggerモード

Triggerモードとは

Unityでいう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(トリガー)】モードの設定方法、メソッドの使い方をご覧ください。

あわせて読みたい
【Unity】当たり判定【Trigger(トリガー)】モードの設定方法、メソッドの使い方 UnityでのTrigger(トリガー)を使った当たり判定の使い方を知りたい その悩みを解決します。 この記事では Triggerモードの説明 Triggerモードを使う条件 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 トリガーに接触して、離れた瞬間に呼び出される

まとめが長い。すまない。

あわせて読みたい
【Unity】当たり判定【Collision】モードの設定方法、メソッドの使い方 UnityでのCollisionモードを使った当たり判定の使い方を知りたい その悩みを解決します。 この記事では Collisionモードの説明 Collisionモードを使う条件 Collision系...
あわせて読みたい
【Unity】当たり判定【Trigger(トリガー)】モードの設定方法、メソッドの使い方 UnityでのTrigger(トリガー)を使った当たり判定の使い方を知りたい その悩みを解決します。 この記事では Triggerモードの説明 Triggerモードを使う条件 Trigger系の...

さぎのみや(@saginomiya8)でした。

Unityでの当たり判定の説明と使う条件

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次