あさりのみそしるダイアリー

ブラック社員がお届けする一貫しないネタの数々・・・おあがりよ!

Hello Unity その4~物理演算と当たり判定を付与~

ナゾノアオイイキモノ ヲ ザンテイプレイヤー ト ニンテイ
ブツリエンザン ト アタリハンテイ ヲ フヨ

ということで、青い彼に物理演算とあたり判定を付与しましょう。



いつもどおり、Unityエディターを起動し、HelloUnity1を開いてください。

さて、本題に入る前に、くすみの原因がわかりました。

イメージ 1

まず、追加した3Dオブジェクトの「(3Dオブジェクト名).fbm」をクリックして、中身を見てみましょう。番号のついた画像ファイルが見えますね。これが3Dオブジェクトに使われているテクスチャ画像です。


イメージ 2

次に「Materials」を選択して中を見てみましょう。
ここには、オブジェクトの材質を決定するマテリアルが複数存在しますが、その中に先ほどの「(3Dオブジェクト名).fbm」にあったテクスチャと同じ番号のマテリアルがあることがわかります。

これをクリックして、赤○の部分をクリックします。



イメージ 3

カラーパレットから白色を選択します。
これでくすみが消えました。

元の色に対して、ここで指定した色をかけあわせるのでしょうね。
元の色でいいので、白色を指定します。

また、このマテリアルの属性を変えることで、色だけでなく、発光させるとか、そういうこともできるみたいです。今回は扱いませんが、いろいろいじってみてもおもしろいでしょう。



さて、ここからが本題です。
まず、プレイヤーオブジェクト(Player)に、物理演算を付与します。


イメージ 4

物理演算を付与するオブジェクトPlayerを選択した状態で、メニュー「Component」>「Physics」から「Rigidbody」を選択します。



イメージ 5

PlayerオブジェクトのInspector(プロパティ)に、「Rigidbody」が追加されました。
直訳すれば剛体ですが、これは「ゲームオブジェクトに物理シミュレーションを適用するためのコンポーネント」になります。

Use Gravityにチェックが入っていることを確認してください。
また、Massに適切な重さを入力します。まぁ、今はデフォルト値でいいです。

この「Rigidbody」を適用するだけで、オブジェクトにこの世の理が・・・つまり物理的な力が作用するようになります。



ためしに実行してみましょう。
画面上・中央にある再生ボタンを押してください。


えっと、床をすり抜けて落ちて行ってしまいました・・・。
これは、このオブジェクトにまだあたり判定が適用されていないためです。

重力だけが作用して、ひたすら下に落ちていきます。
あたり判定は、重力に対する床反力をオブジェクトに与えるようなものです。
作用・反作用みたいな。
厳密にいえば、ただのあたり判定ですが、この世の理をさらに明確に示してくれるものになります。


イメージ 6

ふたたびプレイヤーオブジェクトPlayerを選択した状態で、メニュー「Component」>「Physics」から「Capsule Collider」を選択します。

コライダーと読むのですが、このコライダーで囲まれた領域について、他のオブジェクトとのあたり判定を計算します。


イメージ 7

PlayerオブジェクトのInspector(プロパティ)に、「Capsule Collider」が追加されました。


イメージ 8

「Edit Collider」ボタンをクリックして、シーン画面上にある緑色の枠の大きさを調整します。



イメージ 9

とりあえず適当にマウスで大きくした後、あたり判定を与える対象のオブジェクトを囲うように、Inspector側の数値をいじって調整してください。



イメージ 10

こんな感じでしょうか。




これで床をすり抜けて落ちることはなくなりました。
ただ、ちょっとの段差でバランスを崩して、うまく立てなくなりますね・・・。

これは、現実世界の人間と違い、プレイヤーオブジェクトはうまくバランスを取れないためです。
たとえば、足場の悪いところに立とうとしたとき、うまくバランスを取らないと転倒しますよね?それと同じです。

バランス調整機能が実装されていれば、転倒することなんてないのですが、そんなものは実装していません。
実装するのも難しいかもしれません。たぶん・・・。

なので、物理演算に対して拘束条件を与えます。


イメージ 11

PlayerオブジェクトのInspector(プロパティ)の「Rigidbody」にある「Constraints」をクリックし、表示される「Freeze Rotation」のX,Y,Zすべてにチェックを付けてください。

これにより、物理的に作用するPlayerオブジェクトへのX,Y,Z軸方向の回転が抑制されます。



これで、バランスを崩すことなく、ゲームっぽい感じでキャラクターが移動するようになりました!



ただし、PlaneやCubeなど、足場のない場所にキャラクターが移動すると、奈落の底に転落します。

ステージを広げて、キャラクターの移動可能な場所を大きくしてあげてください。
この辺は、「その1」で説明したとおりの方法を繰り返せばカンタンにできますので、繰り返しの説明はしません。

たぶん、次のステップではステージが広がった状態で説明するかもね。



さて、次はキャラクターアニメーション・・・
と言いたいところだが、遠景が残念なので、空と遠景をよく見せる取り組みでもしましょうかね。

おしまい。