はじめてのUnity 【第11回 Unityの物理特性② Collider】
はじめてのUnity 【第11回 Unityの物理特性② Collider】
Unityの物理特性② Collider
前回に引き続き、Unityの物理特性の仕組みと、利用方法について紹介していきます。
今回はCollider (コライダー)コンポーネントについて見ていきます。
Collider コンポーネントにより、ゲームオブジェクト同士が衝突を検知できるようになります。
Collider コンポーネント
Unity 上での物理挙動はCollider コンポーネントとRigidbody コンポーネントが連動することで実現しています。
Rigidbody コンポーネントがオブジェクトを物理法則にしたがって動かし、
Collider コンポーネントがオブジェクト同士の衝突を検知し、物理特性を正確に再現しています。
ひとつのオブジェクトにCollider とRigidbody が必ずしもセットで適用されている必要はありません。
しかし、衝突の結果によってオブジェクトを動かしたりしたいのであれば、Rigidbody がないといけません。
Collider の種類とプロパティ
Unityに用意されているコライダーの種類と、そのプロパティについてまとめておきます。
Box Collider
立方体の形をしたコライダーです。
シンプルな形ですが、いくつも組み合わせることで車のボディなどの当たり判定も正確に再現できるようになります。
また、部屋などに設定してIs Trigger をオンにすることで、空間への進入判定などにも使用できます。
表1:Box Collider のプロパティ
プロパティ | 説明 | |
---|---|---|
Is Trigger | チェックを入れると、コライダーは物理エンジンから障害物とみなされなくなります。 衝突判定だけ行われて、オブジェクト自体はすり抜けるようになります。 |
|
Material | 使用するPhysic Material (物理マテリアル)を選択できます。 Physic Material には、コライダーが衝突したときの物理挙動が設定できます。 |
|
Center | コライダーの位置をローカル座標(Transform との相対座標)で決定します。(X,Y,Z) | |
Size | コライダーの大きさを決定します。(X,Y,Z) |
Sphere Collider
球体の形をしたコライダーです。
ボールなどに適用することで曲面を考慮した判定が行えます。
また、開けた空間での進入判定や、接触判定などに使用します。
表2:Sphere Collider のプロパティ
プロパティ | 説明 | |
---|---|---|
Is Trigger | チェックを入れると、コライダーは物理エンジンから障害物とみなされなくなります。 衝突判定だけ行われて、オブジェクト自体はすり抜けるようになります。 |
|
Material | 使用するPhysic Material (物理マテリアル)を選択できます。 Physic Material には、コライダーが衝突したときの物理挙動が設定できます。 |
|
Center | コライダーの位置をローカル座標(Transform との相対座標)で決定します。(X,Y,Z) | |
Radius | 球体の半径を決定します。 |
Cupsule Collider
カプセル状のコライダーです。
複雑な当たり判定を用いらないキャラクターや、柱などに使用します。
球体部分と円柱部分を別々に調節できるため、組み合わせることで複雑な複合コライダーを作成できます。
表3:Cupsule Collider のプロパティ
プロパティ | 説明 | |
---|---|---|
Is Trigger | チェックを入れると、コライダーは物理エンジンから障害物とみなされなくなります。 衝突判定だけ行われて、オブジェクト自体はすり抜けるようになります。 |
|
Material | 使用するPhysic Material (物理マテリアル)を選択できます。 Physic Material には、コライダーが衝突したときの物理挙動が設定できます。 |
|
Center | コライダーの位置をローカル座標(Transform との相対座標)で決定します。(X,Y,Z) | |
Radius | 球体部分の半径を決定します。 | |
Height | コライダーの高さを決定します。 カプセルの両端にある球体の中心間(円柱部分)の距離がこの長さにあたります。 |
|
Direction | カプセルの長軸の方向を決定します。(X-Axis, Y-Axis, Z-Axis) |
Mesh Collider
Mesh Collider は、適用するゲームオブジェクトのメッシュデータをもとにコライダーを作成します。
Box Collider などよりも正確な衝突検出が行えますが、その分処理は重くなります。
シーン中のいたる所に設置するのではなく、重要な衝突判定が必要な場面で使用します。
表4:Mesh Collider のプロパティ
プロパティ | 説明 | |
---|---|---|
Is Trigger | チェックを入れると、コライダーは物理エンジンから障害物とみなされなくなります。 衝突判定だけ行われて、オブジェクト自体はすり抜けるようになります。 |
|
Material | 使用するPhysic Material (物理マテリアル)を選択できます。 Physic Material には、コライダーが衝突したときの物理挙動が設定できます。 |
|
Convex | チェックを入れると、Mesh コライダー同士の衝突を許可します。 | |
Smooth Sphere Collisions | チェックを入れると、コライダーの表面が滑らかになります。 (球体を転がす面などに使用する。) |
|
Meah | メッシュの形を選択できます。(図5参照)↓ |
予め用意されているMesh Collider の形状には、以下のものがあります。
図5:Mesh Collider の種類
※Mesh Collider にサイズの項目はありません。
Mesh Collider は適用されたゲームオブジェクトのTransform のプロパティから正確な位置とサイズを反映しているためです。
Physic Material
Physic Material (物理マテリアル)では、コライダーの物理特性について設定できます。
反発係数や摩擦について細かく設定することができるので、バネや地面の抵抗を表現したい場合に有効です。
プロパティの詳細などについては、また別の回で詳しく紹介します。
まとめ
前回から物理特性についてみてきました。
Unity上で物理法則を正しく再現するには、Collider コンポーネントや、Rigidbody コンポーネントを
オブジェクトのサイズや質量に基づいて、正しく設定する必要があります。
これは、物理エンジンの特性が現実世界をベースに考えてられているためです。
仮に、物理エンジンを使用せずに、オブジェクトの動きをスクリプトだけで制御するのであれば、この限りではありません。
しかし、せっかくUnity を使ってゲームを作るのであれば、物理特性をフルに活用したものを作るのが面白いのではないでしょうか。
実はCollider には、今回紹介した以外に、地形用のCollider やホイール用のCollider があります。
これらは使用するシーンが限られてきますので、また別の機会に紹介します。
エンジニア転職・人材紹介サービス 【正社員】自社内勤務《PG・SE》Web・オープン系開発エンジニア/アジアクエスト株式会社 | |
エンジニア転職・人材紹介サービス 【正社員】システム開発エンジニア/株式会社ADCEE |
未経験OKの仕事 | 上場企業の仕事 | 高待遇の仕事 | 外資系の仕事 | 社内SEで検索 | 自社サービスで検索