FPSを作ってみよう1-FirstPersonCharacterを使ってみる-

今回から『FPSを作ってみよう』というカテゴリを作り、少しづつFPSゲームを作っていく記事を作成したいと思います。
FPSを作りたい方が結構いるみたいです(わたくしの勝手な推測を含む)。

FPSってFirstPersonShooterの略だったんですね、FirstPersonShootingだと思ってました。
あれ?違う?(^_^;)

今までの記事では、機能毎に新しくスクリプトを作成していたので、少しづつ作りたい人には少し不便だったかもしれません。

と言っても、すべての記事を段階的に作成していく記事にするわけでなく、FPSに関してだけカテゴリを分けて作ってみようと思います。

FPS以外のゲームの機能に関しては、今まで通りです。

あらかじめ言及しておきますが、ゲーム作り初心者向けになります。
機能を追加していくスピードもゆっくり進み、いきなり難しくならないようにしていきたいと思います。

ある程度ゲームっぽい感じに仕上げたいところですが、いかんせんわたくし自身がFPSが作れるかどうかわかりませんので、どの程度まで作れるかわかりません。

また、このカテゴリ以外の記事内容へのリンクがあり、その内容を理解する必要が出てくる項目も多々ありますのでご了承ください。
わたくしの能力不足で先に進まない事もありえます(+_+)

これだけ言い訳を入れておけば途中で投げ出しても許してもらえるかな・・・・(^_^;)

スポンサーリンク

Standard AssetsのFPSControllerを設置する

UnityのStandard Assets内にあるFPSControllerは、FPSを作る時に必要なキャラクターの機能を搭載しているので、これをキャラクターモデルに設定すればキーボードとマウスを使った主人公キャラクターの移動や視点変更、ジャンプ等の機能が使えます。

ただスクリプトがC#で書かれている所、当ブログではJavaScriptでスクリプトを書いている所(今はC#へと完全に切り替えました)、
スクリプトを変更する時に、既存のスクリプトを解析しなければいけない点を踏まえてこの機能は使いません。
今回はFPSの動きを確認する為に使用します。

もちろんFPSControllerを使って改造していくのもいいと思います。
というかFPSの機能を標準で搭載してくれてるのに使わない方がもったいない気もしますが・・・・(^_^;)
わたくしは一から作っていく事にします。(^_^)/

まずは、Unityのインストール時に入っているStandard AssetsのFPSの機能を使って動きを確認してみます。

Unityインストール時にStandard Assetsのチェックを入れなかった人は、UnityからStandard AssetsをダウンロードするかAsset Storeからもダウンロード出来ます。

FirstPersonCharacter

Assetsフォルダの

Standard Assets→Characters→FirstPersonCharacter→Prefabs→FPSController

をヒエラルキーにドラッグ&ドロップしてください。

RigidBodyFPSControllerというのもありますが、こちらはRigidbodyとCapsuleColliderを使ってキャラクターを移動させ、
FPSControllerはCharacterControllerを使ってキャラクターを移動させます。

Unityではキャラクターを動かす時にRigidbody+コライダ、またはCharacterControllerを使います。
なのでどちらを使ってもOKです。

多少違いはありますが、わたくしの場合CharacterControllerを使ってキャラクターを動かします。

FPSControllerを見るとCharacterControllerの他にRigidbodyも取り付けてあり混乱しますが、とりあえずここでは気にせずいきましょう。

(基本的にはゲームオブジェクトを動かす場合はRigidbodyを取り付けておきます)

FirstPersonCharacterのインスペクタ

ヒエラルキーに設置したFPSControllerを選択するとインスペクタに↑のように表示されます。

TransformのYを2に設定しておきます。
これはキャラクターをステージに登場させた時に、ステージにめり込まないように少し上から登場させる為です。

FirstPersonControllerコンポーネントの項目でパラメータを変更するとキャラクターの動きを変更出来ます。

FPSControllerの設定

Is Walkingは現在歩いているかどうか?のフラグです。
Walk Speedは歩くスピード。
Run Speedは走るスピード。
Runstep Lengthtenは走っている時の足を付く速さを指定します。高い数値を指定するとカメラの上下動が早くなります。
Jump Speedはジャンプ力。
Stick To Ground Forceは地面の方向にY座標の値を足して、確実に設置させる為の数値みたいです。
Gravity Multiplierは重力値の計算をする時の補正値?

MouseLookはマウスでの視点変更のパラメータです。

XSensitivityは横向きの移動速度。
YSensitivityは縦向きの移動速度。
Clamp Vertical Rotationにチェックを入れると視点の限界角度を設定します。
Minimum Xは縦方向の最小角度。
Maximum Xは縦方向の最大角度。
Smoothにチェックを入れると視点の動きがスムーズに動くようになります。
Smooth Timeはスムーズに遷移する時の速さ。
Lock Cursorにチェックを入れるとゲーム中にマウスカーソルを非表示にします。

Use Fov KickはカメラのFieldOfViewを変更するかどうか?みたいですがよくわかりません。
Fov Kickの項目もよくわかりません。

Use Head Bobは歩きを表現する為にカメラを上下に振るかどうかです。
Horizontal Bob Rangeは横に振る時の長さ。
Vertical Bob Rangeは縦に振る時の長さ。
Bob Curveはグラフで表したカメラの動きの基本値。
Verticalto Horizontal Ratioは上下に動く間隔。

Jump Bobはジャンプの時のカメラの上下動についてです。
Bob Durationはカメラの上下動にかかる時間。
Bob Amountはカメラの上下動の幅。

Step Intervalは足音を鳴らす間隔です。
Footstep Soundsは足音、ジャンプ、着地時の音声を指定します。

一部わからないパラメータもありますが、解析した結果はこんな感じになります。

FPSControllerの動きを確認する前にキャラクターが移動する土台を作ります。
ヒエラルキー上で右クリックし3D Object→Cubeを選択し、名前をYukaと変更します。

床のインスペクタ

Yukaを選択するとインスペクタは↑のようになります。
TransformのXとZを100に設定します。
これでFPSControllerが移動する床の作成が完了しました。

FPSControllerを使って床の上の移動を確認する

それでは、FPSControllerの機能を使って床の上を移動させてみましょう。

ここでキャラクターと言わずFPSControllerと言っているのは、キャラクターモデルにFPSControllerを取りつけていないからです。

キャラクターモデルは視覚的に必要ですが、床との当たり判定や移動等はFPSControllerが行っているので、キャラクターモデルがなくても問題ありません。

それではUnityの実行ボタンを押してください。

キャラクターの移動はA(左)、W(前)、S(後)、D(右)または↑↓←→のキーで移動出来ます。
左Shiftキーを押しながら移動キーを押すと走ります。

キャラクターの向きはマウスで向きを変えるので、移動キーで左に移動してもマウスを動かさなければ、前方を向いたまま左に移動するカニ歩きになります。
またSpaceキーを押すとジャンプします。

またUnityの実行ボタンを押すと、マウスカーソルが非表示になるので、実行を停止する事が出来なくなります。
マウスカーソルを表示させるにはEscキーを押してください。

いきなりマウスカーソルが消えると焦りますが、Escキーを押すと表示されると言う事を覚えておいてください。

FPSControllerの動きの確認

↑が実行例です。

上の例では、Sceneタブで確認しているので3人称視点になっていますが、Gameタブで実際の画面を確認すると1人称視点になっている事がわかります。

キャラクターが動くとカメラが上下に動きキャラクターの目の動きを表現してますね。
FPSではカメラがキャラクターの目になるので、こういった演出も必要になりますね・・・・大変そう((+_+))

また、マウス操作で視点を変更するとキャラクターの向きが変わりますが、FPSControllerでは

FPSControllerを設置したヒエラルキー

↑のようにFPSControllerの子要素に、FirstPersonCharacterがあり、そこにカメラが設置されています。

マウスの動きで横を向いた時は、親要素のFPSControllerのY軸の角度を変更し、マウスの動きで上下を向いた時は子要素のFirstPersonCharacterのX軸の角度を変更しています。
移動方向は親要素で、視点の方向は子要素にしています。

親要素のX軸の角度を変更すると、移動キーを押した時に空中の方向に歩いていこうとする為、おかしい動作になってしまうのかも。
移動方向と視点の方向は別にするってことですね。

ここら辺の機能を作成する時は参考にしよう(-.-)

次回から作っていくFPSの機能について

さて、今回はUnityに標準装備されているFPSControllerを使って動きを確認してみました。

これから自前でキャラクターの動きを作成していくので、ある程度どのような動きにするか知っておく必要があるので、FPSControllerを使ってみましたが、
一から作成すると色々大変そうですね・・・(^_^;)

次回はAsset Storeでキャラクターをダウンロードして、キャラクターの移動の機能を取りつけるところまでやってみようと思います。

以前の記事で、キャラクターの移動の機能は作っているので、スルーしておきたいところですが、再確認と言う意味も込めてまた作ってみましょう。
2度手間な気がしますが・・・・。

あぁ・・・ある程度機能を完成させてから記事を書き始めればよかった・・・・(^_^;)
機能が出来るかわからない状況でカテゴリまで作ってしまった(-_-)

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます

コメント

  1. 匿名 より:

    すいません、この「FPSを作ってみよう」のTPSバージョンをやってほしいです。
    お願いできますでしょうか?

  2. RN より:

    すいません、FPSControllerのカメラ操作をマウスではなく自動で追尾し常にキャラが向いてる向きにさせることって可能ですか?

    • FPSControllerの設定はあまり見てなかったので試しにやってみました。

      キーボードの↑↓←→だけで前進・後退・左右移動するだけでマウスの動きで視点が動かなければいいんですよね?

      FPSControllerに設定されているFirst Person Controllerスクリプトの設定で

      Mouse Lookの中のX Sensitivityを0にすると横の視点移動がなくなり、Y Sensitivityを0にすると縦の視点移動がなくなるみたいです。

      • RN より:

        その操作でカメラはマウスで動かなくなりましたがそこから自動追尾のカメラを設定するのはどのようにすればいいのでしょうか?

        • 自動追尾というのは主人公が敵キャラに近付いたらカメラ(主人公キャラ)の向きを敵キャラの方に向かせるという事でしょうか?

          でしたら

          https://gametukurikata.com/program/rotateenemy

          で攻撃の構えをした時に一番近くの敵の方向を向くという機能を作成しているので、これを応用すればFPSControllerでも使えると思います。

          詳しい仕様を教えて頂ければわたくしの方で機能の作成をしてみます(出来るかどうかはわかりませんが・・・)。

        • ご希望の動作になっているかわかりませんが作成してみました。

          本日公開した記事

          https://gametukurikata.com/program/rotatetowards

          を少し改造します。

          まずFPSControllerに設定されているFirst Person Controlerスクリプトを修正します。

          Updateのすぐ後でRotateViewという関数を呼んでいると思うのですが、これをコメント化します。

          このRotateViewがマウスで視点を操作している処理になります。

          FPSControllerには新しくRotateDirectionというスクリプトを作り取りつけます。

          次にFPSControllerの子要素に空オブジェクトを作成し、それにコライダを取りつけサーチエリアとします。

          それにSearchTargetスクリプトを作り取りつけます。

          ターゲットを向いた後に戻す時は必ずVector3の前方向になります。

          FPSControllerで自動で敵をサーチサンプル

          ↑のような感じで敵が範囲内にいる時にマウスの右ボタンを押したらそちらを向くようになりました。

          ボタンを押さずにそちらを向かせるにはマウスの右ボタンを押した条件を外します。

          複数の敵の対応や向きを標準に戻す時に必ず同じ方向を向いてしまうというのは対処が必要かもしれません。

  3. Kshi より:

    FPSControllerのプログラムがうまく作動しません
    どうしたら良いでしょうか?

    • こんにちは(^^)/

      FPSControllerのプログラムがうまく作動しませんというだけでは、どういったところでうまく作動?動作?しないかの詳細がわからない為、返答のしようがありません・・・(^_^;)

      FPSControllerのプレハブをヒエラルキーに配置出来ない。
      配置したけどキーボードの移動キーを押しても動かない。
      マウスで視点変更出来ない。
      コンソールに何らかのエラーが出て実行出来ない、スクリプトのエラーでコンパイルが出来ていない(どんなエラーが出ているのか)
      以前は動いていたが、パラメータの変更等をしたら動かなった(変更した部分)
      プログラムを書き換えてしまって動かなくなった(書き換えたとしたらどう書き換えたのか?)

      詳細を書いて頂くと返答がしやすいです。