【Unity入門】自在に当たり判定を取るには?Colliderを使いこなそう

今回はUnityのColliderについて見ていきたいと思います。

Colliderは当たり判定をとってくれる仕組みです。

当たり判定はUnityで作品を作る上で避けては通れない道で、特にゲームを作りたいという人は、絶対に試行錯誤することになるポイントでしょう。

ぜひこの記事をその足がかりにしてください。

それでは今回のアジェンダです。

[基本] Colliderとは?
[基本] Collidrで当たり判定をとろう!
[基本] Colliderの種類を知ろう!
[応用] すり抜け対策
[応用] 関数が呼ばれない!

実はUnityに様々なColliderが存在します。

今回は基本的な使い方を学んだ後、UnityにどんなColliderが存在するか順に見ていくことにしましょう!

それではよろしくお願いします!

目次

Colliderとは?

まずColliderとは、一言で言うと「当たり判定処理を行ってくれる処理」だと言えるでしょう。

また当たり判定とは「物と物がぶつかったことを知る判定」のことを指します。

つまりColliderを使えば「敵の攻撃にぶつかった」「地面にぶつかった」なんて判定を取れるわけなんですね!

しかも実はColliderと言っても一つだけではないんです。

以下のように用途ごとに様々なColliderが用意されています!

3D上で使えるCollider

・Box Collider
・Sphere Collider
・Capsule Collider
・Mesh Collider

2D上で使えるCollider

・2D BoxCollider
・2D CircleCollider
・Polygon Collider 2D

今回はその中でも特に3DのColliderについて、それぞれ見てみていくことにしましょう。

Collidrで当たり判定をとろう!

まずColliderの具体的な使い方は以下の記事で扱っています。

読み進める前に、まずはこちらを読んでおくことをお勧めします。

エディタ上での設定の仕方から、スクリプトの処理呼び出しまで分かりやすくまとめてありますよ!

3Dで使うColliderの種類を知ろう!

ここから先はColliderの種類について、非常に簡単に見ていきましょう。

それぞれの特徴を把握しておくことで、自分の作品に必要な当たり判定を把握しておきましょう。

Box Collider

Box Colliderは、Cubeを作成した時に自動的についてくる当たり判定です。

四角い当たり判定が取れることが特徴です。

unity-collider-1

unity-collider-2

パラメーター的には、当たり判定のサイズを調整したり、座標をずらしたりが行えます。

また当たり判定へのMaterial設定は、摩擦や衝突時の反発について設定を行えます。

これついて学びたい人は以下の記事を読んでみてください。

またIsTriggerは当たり判定にとって重要な項目です。

以下の記事から、使い方をマスターしておきましょう。

Sphere Collider

Sphere Colliderは球状の当たり判定が取れる仕組みです。

Sphereオブジェクトを作った時などに、自動的についてきます。

unity-collider-3

unity-collider-4

設定できる内容はBox Colliderとほぼ同じですね。

唯一違うのはRadiusという項目ですが、これは半径ですので、つまりサイズと同じですね!

Cupsule Collider

Capsuleを作った際に自動的についてくる「Cupsule Collider」です。

unity-collider-5

「なんだこの形?」と思う人も多いと思いますが、これは人間の当たり判定などによく使われます。

棒立ちで立っている人間など、縦長の当たり判定に使用するわけですね!

正確に人間型の当たり判定が必要ない状況ならば、実用的に使えそうです!

unity-collider-6

パラメーター的に注目するべき場所は高さでしょうか?

高さを変動させることが可能なため、例えばキャラクターがしゃがんだ時のサイズ変更も楽に行えますね!

Mesh Collider

最後にMesh Colliderです。

これは3Dモデルの見た目そのままでの当たり判定を取ることができるColliderです。

Quadなどを作成した時についてきます。

unity-collider-7

unity-collider-8

パラメータの中で重要な点はMeshでしょう、Unity上で表示されているオブジェクトはみんなMeshを持っています。

QuadのInspectorウィンドウ上でも、Quadという名前のMeshが存在していることが確認できると思います。

つまりオブジェクトの描画に使用しているMeshの情報を元に、当たり判定をとっているわけですね!

優秀なColliderですが、しかし注意点もあります。

複雑なオブジェクトの場合、膨大な情報がMeshに入っているわけです。

その膨大な情報を元に当たり判定を行うわけなので非常に重い処理となってしまうわけですね…

普段は「Cupsule Collider」「Sphere Collider」など、丸や四角など軽い処理で当たり判定をとり、仕様上どうしても必要な場合のみMesh Colliderを使用するようにしましょう。

よくある問題点

最後に少しだけ、当たり判定を取る上で、よく発生する質問を乗せておきます。

すり抜けて対策

当たり判定は絶対ではありません。

超高速でぶつけた場合などには、貫通することもあるわけです。

それへの対策として、そもそも速度を出しすぎないことや判定頻度を上げる方法などがあるわけですが…

詳細は以下記事へまとめてあります。

悩んでいる人は読んでみてください。

関数が呼ばれない!

Colliderで当たり判定をとった際、呼び出される関数として「OnCollisionEnter関数」「OnTriggerEnter関数」などがあります。

それらの関数を使用している時、なぜか急に呼び出されなくて困っている人もいると思います。

大半はIsTriggerの設定が原因だと思いますので、以下の記事から関数の呼び出し条件を確認しておきましょう!

まとめ

今回はColliderの使い方と、その種類について主に見てきました。

当たり判定と言っても、Unityでは様々な種類が用意されているんですね!

状況に合わせて最適なColliderを使用しましょう!

しかしいろいろあるとはいえ、適当な当たり判定でも十分な箇所は、極力「Box Collider」「Sphere Collider」で済ませてしまうことが、軽い負荷で当たり判定を行う一番のコツです。

覚えておいてください。

この記事を書いた人

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

目次