FPSを作ってみよう3-スクリプトを使ってキャラクターを前後に動かしてみる-

キャラクターモデルに「Musasi」君を使用している方は

FPSを作ってみよう2-Standard AssetsのEthanをモデルとして使い動かす機能を取りつける-
FPSゲームのキャラクターにStandard AssetsのEthanをモデルとして使いCharacterControllerコンポーネントを取りつけるまでをやります

に記載している通りStandardAssetsのEthanをご使用ください。
ごめんなさい。

今回からスクリプトを作成していきます。

前回3DモデルにCharacterControllerコンポーネントを取りつけてキャラクターを移動させる機能を取りつけました。

実際にキャラクターを動かすにはスクリプトを記述してキャラクターである「Musasi」君に取りつける必要があります。

スポンサーリンク

キャラクターを移動させる方法を考える

まずはFPSゲームでキャラクターをどのように動かすか考えましょう。

第3者視点のアクションゲームでは↑のキーを押せばキャラクタが上の方向を向きそちらに移動します。
←のキーを押せば左の方向を向きそちらに移動します。

しかしFPSの場合はキーを押した方向にキャラクターの向きを変更しそちらに進むのではなく、
向きを変えずに押した方向に進むようにします。

前進は問題ないと思いますが、後進の場合は前を向いたまま後ろ歩き、左右に移動する場合は前を向いたままカニ歩きするという感じになります。

キャラクターが向きを変える場合はマウス操作やゲームパッドの右スティックを使うようにします。
キャラクターの向きに関しては次回以降やると思います。これ結構大変そう・・・・(^_^;)

キャラクター移動のスクリプトに関しては

Unityでキャラクターの移動をプログラミングしてみる
キャラクターを移動させる為のスクリプトを作成し、キャラクターを動かす機能を作成します

を参照してください。
キャラクター移動のスクリプトの考え方を記載しています。

前後に動く場合はキー操作のInput.GetAxis(“Vertical”)
左右に動く場合はキー操作のInput.GetAxis(“Horizontal”)

キャラクターには重力を働かせ、地面と接地している時だけ移動出来るようにします。

キャラクターを移動させるスクリプトMyCharaの作成

ではスクリプトファイルを作成していきます。
作り方は何通りかありますが、

スクリプトファイルの作成方法1

↑のようにProjectsタブのAssetsエリアで右クリックしてスクリプトファイルを作成する事が出来ます。

出来上がったスクリプトをゲームオブジェクトに設定する時はそのゲームオブジェクトのインスペクタのAdd Componentから選択する方法と、
スクリプトファイルをゲームオブジェクトにドラッグ&ドロップする方法があります。

インスペクタのAddComponentを押して新しいスクリプトを作成

↑のようにゲームオブジェクトのインスペクタでAdd Componentし、New Scriptを選択します。

名前を付けてスクリプトファイルを作成

新しい名前を付けCreate And Addを押します。

キャラクター操作スクリプトはMyCharaという名前に設定しました。
Assetsエリアで右クリック→Create→Folderでフォルダを作成し、名前をScriptsを作成します。
これから作成していくスクリプトファイルはこのScriptsフォルダに入れていく事にします。

詳細はさきほど紹介したキャラクター移動のスクリプトに関してのリンク先を見てください。

Start関数内でCharacterControllerコンポーネントの取得をし、
Update関数内ではCharacterControllerのisGroundedプロパティで地面にコライダが接地しているかどうかを確認しています。

地面に接地していたら重力加速度は0になるのを含め移動値を0に初期化します。Vector3.zeroはVector3(0, 0, 0)と同じです。

地面に接地していたら前後左右のキーの押している度合いをそれぞれの軸の速度に設定します。

地面に接地しているかしていないかにかかわらず重力は働くので重力値Physics.gravity.yの値にTime.deltaTimeをかけ
重力を計算しています。

Time.deltaTimeはパソコンの処理能力によってUpdate関数の呼ばれる回数が変わってくるので、性能差で処理する回数が変わらないように
かけています。

重力に関しては

Unityで間違った重力の計算をしているかも!?
Unityのキャラクター等に重力を働かせる事は多いですが、重力を働かせる処理が実は間違っているかもしれません。

を参照してください。

最後にCharacterControllerのMove関数でキャラクターを移動させています。

これでスクリプトが完成しました。
Assetエリアでスクリプトを作成し、まだキャラクターにスクリプトを取りつけていない場合はスクリプトを「Musasi」君にドラッグ&ドロップして取りつけてください。

スクリプトをキャラクターにドラッグ&ドロップする

↑のようにスクリプトファイルを「Musasi」君にドラッグ&ドロップするだけでコンポーネントを取りつけられます。

キャラクターの動きを確認する

それではUnityの実行ボタンを押してキャラクターが移動するかどうか確認しましょう。

現時点では床が真っ白で平らで広く、カメラの視点がキャラクターの視点なので移動している事が解りづらくなっています。
その為、Sceneタブで第3者目線で見えるようにして確認します。

SceneタブとGameタブを別のウインドウにドラッグ&ドロップして同時に確認出来るようにします。

SceneタブとGameタブが同じウインドウにある

↑のようにひとつのウインドウ内にSceneタブとGameタブがあると同時に確認が出来ません。

Sceneタブを横に移動

Sceneタブをちょっとだけ下にドラッグして上のような状態でドロップするとGameタブの左に別のウインドウが出来て横に並びます。

Sceneタブを横に移動した結果

↑が横並びにした状態です。

ここでUnityの実行ボタンを押せば実際のゲーム画面(Gameタブ)と作者目線(Sceneタブ)とを同時に確認出来ます。
実際のゲームで見える範囲だけでなく周りの状況等を確認したい時はSceneタブが見えると便利です。

Sceneタブを下に移動した結果

横並びがうまく出来ないという方は、Consoleタブ等がある下のウインドウにSceneタブをドラッグ&ドロップして確認するのもいいかもしれません。

これで同時確認が出来るようになったのでキャラクターの動きを確認してみましょう。

キャラクターがキー操作で移動するか確認

上が前後左右にキャラクターを移動させてみた結果になります。
Gameタブでは移動の確認が難しいのでSceneタブで確認しています。

キャラクターが前方を向いたまま前、後ろ、左、右に動くようになりました。

まだアニメーションの切り替えを行っていないのでキャラクターはずっと同じ状態のままおばけのようにスーッと動きます(=_=)

FPSだと自分自身を見る事はあまりないのでアニメーションを設定しない、というよりキャラクター自体を作らず手だけを動かすという場合もあるようです。
わたくしの場合はとりあえずキャラクターモデルを配置し、アニメーションを設定していこうと思います。

FPSからTPSに変更する時も結構楽にいけるかもしれません。

さて、これでキャラクターを簡易的に動かす事ができるようになりました。

まだ歩くモーションへの切り替えやキャラクターが走る、視点を切り替えるという機能を作成していないので、
キャラクターの動きとしては全然物足りませんが、少しづつ出来る事を増やしていきましょう。

次回はキャラクターが走る機能とアニメーションの切り替えの機能あたりを作っていこうかなと思います。