【Unity】Colliderによる当たり判定を理解しよう!


コライダーマニュアルページ

今回はUnityのColliderによる当たり判定方法についてまとめました。

当たり判定の判定方法には様々なものがあります。ご自身のゲームにあった当たり判定を見つけて利用してください。

本記事でご紹介する内容は以下の通りです。

  • 当たり判定の使用区別
  • OnCollisionによる当たり判定
  • OnTriggerによる当たり判定
  • ユニティちゃんの攻撃判定(応用)

本記事ではユニティちゃんを使用しています。

パンチで破壊

© Unity Technologies Japan/UCL

参考ページ)ユニティちゃん公式サイト

当たり判定の使用区別

当たり判定には様々なものがあると冒頭で述べましたが、どのようなものがあるのかざっくりまとめました。

どのようなときに使用するのかも機能欄に記述してありますのでご参考ください。

名称 機能
OnCollision
物理的に接触するオブジェクトの当たり判定
OnTrigger
物理的に接触しないオブジェクトの当たり判定
OnControllerColliderHit
ControllerColliderを使用したオブジェクトの当たり判定

大まかに分けてこの3種類を使用すればほとんどの当たり判定を実装することができます。

これ以外でも当たり判定をする方法はありますが、簡単に当たり判定を実装できるのはこの3つです。

使い分けはシンプルで、

  • 物理的に接触させたいオブジェクト同士の当たり判定はOnCollsionを使用する
  • 物理的に接触したくないオブジェクト同士の当たり判定はOnTriggerを使用する
  • ControllerColliderを使用したオブジェクトの当たり判定にはOnControllerColliderHitを使用する

このように捉えていただければ問題ありません。

今回はこの中のOnCollisionとOnTriggerに絞ってご紹介します。

OnCollisionによる当たり判定

OnCollisionはいつ使用する?

では具体的にOnCollisionの当たり判定がどのような場面で使用できるか考えてみましょう。

物理的に接触するオブジェクト同士の当たり判定ですので例えば、

  • 物理攻撃
  • ダメージ床
  • 実体を持ったキャラクター同士の衝突

このようなさまざまな場面で使用されます。

3種類の当たり判定方法

OnCollisionには3種類の当たり判定があります。

名称 機能
OnCollisionEnter
オブジェクト同士が接触した瞬間呼び出される
OnCollisionStay
オブジェクト同士が接触している間呼び出される
OnCollisionExit
オブジェクト同士が離れた瞬間呼び出される

OnCollisionEnter

まずはじめにOnCollisionEnterがあります。

これはオブジェクト同士がぶつかった瞬間に呼び出されます。

ぶつかった瞬間

衝突した瞬間のその一回のみに処理したい内容を記述します。

OnCollisionEnterは以下のような場面で使用できます。

  • 特定キャラクターとぶつかったら他のシーンを呼び出したいとき
  • 触ったオブジェクトを消したいとき(OnTriggerでも実装できます)
  • 壁当てなどで特定オブジェクトに当たったとき

OnCollisionEnterの詳しい使い方については以下の記事をご参考ください。

参考記事)OnCollisionEnterの使い方

OnCollisionStay

次にOnCollisionStayがあります。

これはオブジェクト同士が接触している間ずっと呼び出されます。

ぶつかっている間ずっと

衝突している間、常に実行したい処理内容を記述します。

OnCollisionStayは以下のような場面で使用できます。

  • ダメージ床に乗っているとき
  • 地面と接触しているとき
  • 特定エリアに進入したとき

OnCollisionStayの詳しい使い方については以下の記事をご参考ください。

参考記事)OnCollisionStayの使い方

OnCollisionExit

最後にOnCollisionExitがあります。

これは接触していたオブジェクトが離れた瞬間に呼び出されます。

離れた瞬間

離れた瞬間に実行したい処理を記述します。

OnCollisionStayは以下のような場面で使用できます。

  • キャラクターがジャンプなどで特定オブジェクトから離れたとき
  • 特定オブジェクトが消滅したとき
  • スポーツなどでラケットからオブジェクトが離れるとき

OnCollisionExitの詳しい使い方については以下の記事をご参考ください。

参考記事)OnCollisionExitの使い方

OnTriggerによる当たり判定

OnTriggerはいつ使用する?

ではOnTriggerはどのような場面で使用するのでしょうか。

「物理的な接触を避けたいオブジェクト同士の当たり判定」を実装したいときに使用します。

例えば、以下のような場面で使用できます。

  • ゴールライン
  • フィールド上のアイテム
  • FPSそのほかで使用する貫通する攻撃
  • 幽霊など透明なオブジェクト
  • すりぬけ可能な壁

このように、OnTriggerも色々な場面で使用することができます。

3種類の当たり判定方法

判定方法はOnCollisionと同じく3種類あります。

名称 機能
OnTriggerEnter
トリガーオブジェクトに侵入した瞬間呼び出される
OnTriggerStay
トリガーオブジェクトに侵入している間呼び出される
OnTriggerExit
トリガーオブジェクトから脱出した瞬間呼び出される

基本的な使い方はOnCollisionと変わりません。

OnTriggerの詳しい使い方は以下きじをご参考ください。

参考記事)OnTriggerの使い方

ユニティちゃんの攻撃判定(応用)

最後に応用として攻撃判定の方法をご紹介します。

これは上記のOnTriggerを使用することで実現します。

↓以下のように攻撃判定を実行して特定オブジェクトを破壊する

キックで破壊

Unityのアセットストアには攻撃モーションを使用できるキャラクターが多数ありますが、今回はユニティちゃんを使用した方法をご紹介します。

ユニティちゃんの攻撃する手と足にそれぞれコライダーを設置して、攻撃コマンドが押された瞬間にのみコライダーをオンにするスクリプトを記述することで実現することができます。

具体的な方法は以下記事でご紹介しておりますので、ぜひご参考ください。

参考記事)ユニティちゃんに攻撃アニメーションをつけて当たり判定を設定しよう!

まとめ

いかがでしたでしょうか。

今回はUnityのColliderによる当たり判定方法をご紹介してきました。

当たり判定にも色々な種類があることがご理解いただけたでしょうか。

ここで紹介した当たり判定の方法は当たり判定のほんの一部です。この中にご自身が作りたいゲームにあった適切な当たり判定があれば幸いです。

Colliderは物理演算コンポーネントの1つであり、他の物理演算コンポーネントについても紹介している記事があるので、是非ご覧ください。

参考記事)物理演算を徹底解説!物理演算の停止・精度変更・水や髪の物理演算まで


ユニティちゃん

この記事はいかがでしたか?よければシェアをお願いします。

Yuya Furui

Twitterはじめました @FuruiYuya