FPSを作ってみよう2-Standard AssetsのEthanをモデルとして使い動かす機能を取りつける-

今回はStandard AssetsのEthanをキャラクターモデルとして使い、キャラクターに当たり判定と動かす機能を取りつけます。

当たり判定と動かす機能はCharacterControllerというコンポーネントが両方やってくれるのでこれをキャラクターに取りつけます。

前回

FPSを作ってみよう1-FirstPersonCharacterを使ってみる-
FPSゲームを作る為の第一歩、FPSゲームの動きをUnityに標準で搭載されているFirstPersonCharacterの中のFPSControllerを使って動きを確認します。

でキャラクターが動くステージであるYukaを作成しましたが、そこの上をキャラクターが移動出来るようにします(今回は動かす為の機能取り付けのみ)。

--Asset Storeでsoldiers packをインポートしFPSを作っていた方にお願いがあります--

Asset Storeでsoldiers packをインポートした方はStandard AssetsのEthanを使ってください。
soldiers packのArmy 01は、ボーンがうまく設定されていない事がわかりました(T_T)

キャラクター用のアニメーションをblenderで作成し、Unityに取り込んだまではよかったんですが、作成したアニメーションと同じようなモーションにならない為、
なんでだあああ!

と思って機能作成が停滞していたんですが、ふと違うStandardAssetのEthanを使ってアニメーションを確認したところわたくしの作ったアニメーション通りの動きになりました。

Armyのボーン設定が少しおかしい

↑がArmy 01です。
指が変な方向に曲がっています。

Ethanのボーン設定はうまくいっている

↑がStandardAssetのEthanです。こちらがちゃんとした方です。

Musasi君にアニメーションを適用した場合

↑がArmy 01に自作のアニメーションを適用した場合です。
本来のアニメーションと違い手が開いちゃってます。

Ethanにアニメーションを適用した場合

↑がEthanに自作のアニメーションを適用した場合です。
こちらは本来のアニメーション通りになっています(おそらく)。

今後ゲームを作成する上でボーンがうまく設定されていないと困るのでこれからは
Standard Assets→Characters→ThirdPersonCharacter→Models→Ethan
を使用するようにしてください。

もちろん他のキャラクターモデルでもかまいません。

キャラクターモデルのボーンがうまく設定されているか最初に確認してください。
でないと機能を追加していった後にまたキャラクターを再設定する必要が出てくると結構面倒くさいです。

--お願いここまで--

スポンサーリンク

3Dキャラクターを人型キャラクターとして扱う

キャラクターのImportSettingsを変更してキャラクターを人型のキャラクターとして扱えるようにします。

キャラクター選択

↑のようにEthan.FBXを選択します。

キャラクターのインポートセッティングのRigを選択

インスペクタにEthan.FBXの情報が表示されます。
Rigを選択してAnimation TypeをLegacyからHumanoidに変更します。
(Ethanを使用する場合はすでにHumanoid型になっていると思います)

↑のようにAnimationTypeをHumanoidに変更したらApplyを押します。
これでキャラクターが人型キャラクターとして扱えるようになりました。

主人公キャラクターをシーンに配置してゲームに登場させる

キャラクターのプレハブをヒエラルキーにドラッグ&ドロップ

キャラクターをヒエラルキー上にドラッグ&ドロップしてシーンにキャラクターを設置します。

ヒエラルキーの状態

Ethanの名前を「Musasi」に変更します(名前は適当に付けてください)。

「masasi」君じゃなく「Musasi」君です・・・まぎらわしい!!しかもどうでもいい・・・・(^_^;)
次に「Musasi」君の位置を調整します。

キャラクターのY座標を変更する

「Musasi」君を選択するとインスペクタに「Musasi」君の情報が表示されます。

Transformは位置や角度、スケールを指定する項目で、Y座標を1に設定しておきます。
これは以前作ったYukaに「Musasi」君がめり込まないようにする為です。

Animatorはキャラクターのアニメーションを制御するコンポーネントなので現時点では無視しておきましょう。

シーン上のキャラクターの位置

↑がSceneウインドウでキャラクターを表示した画面です。
Yukaから浮いた位置にキャラクターが表示されています。
Yukaが真っ白なので記事の背景色とかぶっててわかりづらい・・・・(^_^;)

これでキャラクターをゲームに登場させる事が出来ました。

ゲーム画面が見えないのでカメラを設置し見えるようにする

試しにUnityの実行ボタンを押してどうなるか試してみてください。

Unityの実行ボタン

↑の赤い四角の中のボタンを押すとゲームを実行している状態になります。

カメラなしのゲーム画面

ゲームの実行ボタンを押すと↑のようにGameタブのウインドウに実際のゲーム画面が表示されます。

元々シーンにカメラが設置されていれば上の画面のようにはなりませんが、カメラが設置されていない場合ゲームを映すカメラがないので、何も表示されません。

これでは確認が出来ないのでキャラクターと床を表示するカメラを設置してみます。
すでにカメラが設置されている方はカメラ位置と角度の調整だけ行います。

カメラの作成

↑のようにヒエラルキー上で右クリックし、Cameraを選択します。
名前をMainCameraに変更します。

カメラのインスペクタ

MainCameraを選択するとインスペクタにカメラの情報が表示されるので、カメラの位置と角度を調整し、キャラクターと床を表示出来るようにします。

赤枠のように数値を入力してください。
Y座標は2で床より2m上、Z座標は6でキャラクターより手前側にカメラがあるようにします。

Unityでの奥行きはZ座標で表されます。

またカメラの向いている方向がキャラクターの反対側になっているのでRotationのYを180にして反対側を映すようにします。

カメラの細かい説明は

Unityのサブカメラを作り、別視点で小窓に表示する
Unityでサブカメラを作成し、メインカメラの右上に小さく表示します。これでキャラクターの頭上からの視点を右上に小さく表示するといったことが出来ます

を参考にしてください。

また作成したMainCameraのTagをMain Cameraを設定しておきます。
すでにMain Cameraというタグが設定されているとは思いますが、なければ作成し設定しておいてください。

キャラクターにCharacterControllerを取りつける

これでカメラの設定が終了したので、再びUnityの実行ボタンを押してどうなるか確認してみましょう。

3Dモデルを配置しただけの実行画面

実行すると上のようにキャラクターである「Musasi」君が床(白いのでわかりづらい・・・)の上に人形のように浮いているだけです。
「Musasi」君にはまだ当たり判定や動く機能、重力を働かせるスクリプトの記述等をしていないので、本当にただの人形と同じです。

そこで「Musasi」君に当たり判定、動く機能を備えているコンポーネントのCharacterControllerを取りつけましょう。

コンポーネントは構成要素という意味で1つの機能のようなものと考えるといいと思います。
いずれ作る事になるスクリプトもコンポーネントになります。

ヒエラルキーの「Musasi」君を選択してインスペクタに情報を表示させ下の方にあるAdd Componentをクリックし、
Physics→CharacterControllerを選択してください。

CharacterControllerを追加した後のインスペクタ

↑のように「Musasi」君のインスペクタにCharacterControllerコンポーネントが追加されました。
CharacterControllerの項目の設定値を変更するとコライダ(当たり判定の範囲)のサイズやキャラクターが登れる坂の角度、登れる段差の高さを変更出来ます。

CharacterControllerに関しては

Unityでキャラクターを移動する為の準備と概要(スクリプトを書く前に)
Unityでキャラクターを移動する為に準備しておく事と、移動させる為に必要な事を考える

も参考にしてください。

CharacterControllerの項目の設定値を変更してキャラクターモデルと合うように調整します。

まずはSceneタブを表示してから、Hierarchyの「Musasi」君をダブルクリックしてください。

「Musasi」君がフォーカスされるはずです、さらにマウスの真ん中のスクロールボタン?でスクロールすると「Musasi」君を
見る位置を近づけたり遠ざけたり出来ます。

デフォルトのCharacterControllerのコライダの位置

↑の画像で緑色で表示されている部分が当たり判定の部分です。

キャラクターの位置とコライダ(当たり判定)部分がずれているので調整する必要があります。
インスペクタで値を変更してキャラクターに合うようにコライダを調整します。

CharacterControllerの設定値を変更する

↑のように設定を変更します。

CharacterControllerの設定値を調整した結果

↑が設定値を調整した結果です。

コライダがキャラクターを囲んでいるように設定されました。
このコライダが地面や他のキャラクターとの当たり判定に使われます。

これで当たり判定とキャラクターを動かす機能を取りつける事が出来ました。

Unityの実行ボタンを押して確認、といきたいところですが、キャラクター移動のスクリプトを取りつけていないので前回とまったく変わりません。

キャラクター移動のスクリプトは次回から少しづつ作成していく予定です。

FPSゲームの視点にする為カメラをキャラクターの子要素に移動する

今回作っていくゲームはFPS(FirstPersonShooter)なのでゲームを映しだすカメラは主人公キャラクターの視点にしなければいけません。

つまりカメラはキャラクターの目の位置に移動させます。

カメラはキャラクターが移動すると一緒に移動していく必要があるのでキャラクターの子要素にMainCameraを移動します。
子要素のゲームオブジェクトは親要素が動くと相対的に動きます。

子要素のTransformの値は親要素からの相対値になるので注意が必要です。
親要素はグローバル(ゲームの世界の位置)で子要素はローカル(親要素からの位置)になります。

ではMainCameraを「Musasi」君の子要素に移動し、目の辺りに位置を調整しましょう。

カメラをキャラクターの子要素に移動

まずは上のようにMainCameraをドラッグ&ドロップして「Musasi」君の子要素に移動させます。
この時点では前回のカメラの位置や角度の値が設定されているのでカメラが変な所を表示しています。

カメラの位置と表示範囲を変更する

↑のようにMainCameraのTransoformを調整し、CameraのCliping PlaneのNearを0.1にします。

わたくしと同じ数値を入力してもいいですが、数値を入力せずScene画面のカメラを直接移動する方がわかりやすいです。

ゲームオブジェクトの移動に関しては

Unityを起動後の画面を細かく見てみる
Unityを起動後の画面とメニューを細かく見ていき、どこをどう使うかを学んでいきます。

を参考にしてください。

オブジェクトの操作という項目でゲームオブジェクトの移動方法が載っています。

目の辺りにカメラを移動する

↑がMainCameraのTransformを調整した時の位置になります。
なんとなく目の辺りからゲームの世界が見えるようになっています。

まだキャラクターを移動させたり、視点を動かしたりという事をしていないのでこの位置でうまくいくかわかりません。
今後機能を追加していく過程でカメラの位置を調整していく事もあるかもしれません。

これでキャラクターの当たり判定、移動する機能、キャラクターの目にあたるカメラが出来上がりました。

記事の進め方と今後のFPSゲームの機能作りの予定

他の記事に比べると進み具合が本当に遅いですね・・・(^_^;)
今までの記事をご覧いただいていた方には全然進まず飽きられる可能性もありますし早く進めろ!と思う人も多いかも?

初心者にわかりやすいようにと言うのももちろんあるんですが、わたくし自身が機能作成をゆっくり進められ
自分自身にプレッシャーを与えないようにしてるという部分が大きいです。ごめんなさい(__)

次回はスクリプトを作成してキャラクターを前後左右に動けるように出来ればと思います。