シンプルなアクションゲームを作ってみようの第5回です。
今回はゲームで使用するキャラクターにRigidbodyとCapsuleColliderを取り付けたいと思います。
前回はUnityエディターでの操作についてやりました。
シンプルなアクションゲームを作ってみようの他の記事は
シンプルなアクションゲームを作るのを通してUnityの使い方を学ぶカテゴリです。
から参照出来ます。
Rigidbodyとコライダについて
今回は前々回Stage1シーンに配置したキャラクターモデルにRigidbodyコンポーネントとCapsule Colliderを取り付けていきますが、このRigidbodyコンポーネントとCapsule Colliderはいったい何をするものなのでしょうか?
Capsule Colliderは衝突装置(衝突と判定する範囲)であるコライダの一つでカプセル型の形状のものです。
Rigidbodyはコライダが衝突した時に物理特性を使って制御する為の機能です。
キャラクターを移動させる時には、キャラクターが他のゲームオブジェクトと衝突しているかどうかを判定するコライダ、衝突した時にそれを制御するRigidbodyが必要になるという感じです。
今回の「シンプルなアクションゲームを作ってみよう」のカテゴリではRigidbody+CapsuleColliderを使ってキャラクターの移動をさせますが、CharacterControllerコンポーネントを使うことでも出来ます。
CharacterControllerを使ったキャラクターの移動処理はこのカテゴリ外の記事で記載しているのでそちらを参照してください。
RigidbodyとCapsuleColliderの取り付け
RigidbodyとCapsule Colliderが何かわかったので早速キャラクターモデルに取り付けてみましょう。
前々回作ったStage1シーンを開いてヒエラルキーでキャラクターモデルであるEthanを選択しインスペクタを見ます。
インスペクタの下にAdd Componentボタンがあるので、押します。
出てきたメニューからPhysics→RigidbodyとPhysics→Capsule Colliderを選択して取り付けます(各々)。
以下のようにEthanのインスペクタでRigidbodyコンポーネントとCapsule Colliderが取り付けられたのを確認します。
RigidbodyとCapsule Colliderの設定をしていきます。
Rigidbodyの設定
RigidbodyのMassは質量でkg単位なのでEthanの場合は60ぐらいにしておきます。
Dragはゲームオブジェクトが力を受けた時の空気抵抗でこれは0にしておきます。
Angular Dragは回転に対する空気抵抗でこれは0.05にしておきます。
Use Gravityは重力を働かせるかどうかなのでチェックを入れておきます。
Is KinematicはTransformをスクリプトから直接変更して操作するかどうかなのでこれはチェックを外します。
Interpolateは補間(移動元から移動先の間)に関しての設定で
Noneは補間なし
Interpolateは前フレームのTransform情報に基づいてスムージングを行う
Extrapolateは次フレームのTransform情報を予測してスムージングを行う
となります。
ここではExtrapolateを設定します。
Collision Detectionは高速で移動するオブジェクトが他のオブジェクトをすり抜けてしまうのを防ぐための設定です。
Discreteは離散型衝突検知で一般的な設定です。
Continuousは動的なコライダ(Rigidbodyを持つ動くことを想定しているオブジェクト)には離散的、静的なコライダ(Rigidbodyを持たない動くことを想定していないオブジェクト)に対してはスイープに基づく連続的衝突検知を行います。
Continuous DynamicはContinuous、Continuous Dynamicを設定したゲームオブジェクトに対してスイープに基づく連続的な衝突検知を行います。静的なコライダにも連続的で、その他のコライダは離散的。
Continuous Speculativeは動的なコライダに投機的な連続衝突検知を行います。
基本的にはDiscreteで、すり抜け等の問題が出たら他の設定を試すと良いかもしれません。
今回の場合は高速でキャラクターを移動させないのでDiscreteを設定します。
Constraintsはリジッドボディの動きの制限をします。
Freeze Positionはリジッドボディに対する力によって位置を動かさない軸にチェックを入れます。
Freeze Rotationはリジッドボディに対する力によって回転をさせない軸にチェックを入れます。
今回の場合は人型キャラクターなので力によって回転をさせたくない為、Freeze RotationのXYZ全てにチェックを入れます。
位置はキャラクターを移動させる必要がある為、XYZの全てのチェックを外します。
これらの設定をしてRigidbodyコンポーネントは以下のようになりました。
Capsule Colliderの設定
次はCapsule Colliderコンポーネントの設定をしていきます。
Is Triggerにチェックを入れると衝突ではなく検知範囲として使用出来ます。
今回の場合はキャラクターの衝突範囲として使うのでチェックはしません。
Materialはこのコライダが他のコライダと衝突した時の衝突設定マテリアルを設定することが出来ます。
キャラクターには特別設定しないのでここでは無視します。
Centerはコライダの中心位置の座標を設定します。
ここではXとZは0、Yに0.79を設定します。
Radiusはコライダの半径を設定します。
ここでは0.3を設定します。
Heightはコライダの高さを設定します。
ここでは1.6に設定します。
Directionはコライダの方向を設定します。
ここではY-Axisを設定します。
コライダの設定はシーンビューでEthanをフォーカスし、シーンビューのコライダのサイズを見ながらインスペクタのCapsule Colliderの値を設定するか、
Capsule ColliderコンポーネントのEdit Colliderボタンを押して、
シーンビューで□を直接ドラッグしてコライダのサイズを調整する方法があります。
これらの設定をするとCapsule Colliderコンポーネントは以下のようになりました。
Ethanを落下させてみよう
EthanにRigidbodyとCapsule Colliderを取り付けて設定をしました。
Rigidbodyの設定でUse Gravityにチェックを入れたのでゲームオブジェクトに重力が働くようになったのと、Capsule Colliderで他のゲームオブジェクトと衝突するようになりました。
そこでUnityエディターのプレイボタンを押して実行し、シーンビューでEthanをY軸の矢印を上向きにドラッグして離し、Ethanが落下して床に衝突するかを確認してみましょう。
終わりに
今回はキャラクターモデルにRigidbodyコンポーネントとCapsule Colliderを取り付けて物理的に衝突出来るようにしました。
次回はスクリプトの作り方についてやります。