FPSを作ってみよう6-キャラクターのジャンプ機能を搭載する-

前回の記事でFPSゲームのキャラクターの向きと視点の上下の機能が出来ました。

FPSを作ってみよう5-キャラクターの向きの変更や視点を上下に動かす-
FPSゲームでキャラクターの向きの変更や視点の方向を変える機能を作成していきます。視点の向きはパラメータで限界値を指定出来るようにして向きが変わりすぎないようにします。

今回はキャラクターがジャンプ出来るようにして一通りのキャラクターの移動機能を完成させます。

別の記事でUnityでジャンプ機能を搭載する方法を書いているので、

Unityでキャラクターがジャンプ出来るようにする
Unityのゲームでキャラクターがジャンプ出来るようにする機能を作成します。

こちらを参考にするとすぐさま出来上がります。(^^)v

スポンサーリンク

FPSゲーム用のジャンプ機能を考える

改めてまた同じような記事を作る必要もないのですが、FPSカテゴリなのでまぁいいでしょう(謎)

ただ通常のアクションゲームのジャンプ機能ではジャンプのアニメーションを再生するようにしますが、今回はジャンプボタンを押す前のアニメーションのままで
いきましょう。

何かよさげなジャンプアニメーションがあればそちらをアニメーターコントローラーの状態として作り遷移を繋げてください。

なぜアニメーションを付けないかは言わずもがな単純に制御が面倒くさい事になるので、直前のアニメーションのままジャンプさせて楽をします(^。^)

ではジャンプ機能を実現させる方法を考えましょう。
上記のリンク先で解説しているので、そちらをご覧いただいてもかまいません。

キャラクターの手前と奥、左と右に移動する機能はすでに作成してあり、それぞれZ軸、X軸を変更し移動しています。

ジャンプの場合はキャラクターが上下に移動するのでY軸を操作する事になります。
(それぞれの軸の値の操作はCharacterControllerの機能で変更されるので直接値を変更はしていません)

Y軸の値を変更する事でキャラクターが上下に移動するのでCharacterControllerのMove関数の引数に渡すVector3のYの値を操作する事でジャンプ機能が実現出来ます。

キャラクターにかかる重力の機能はすでに作成していますので、キャラクターはジャンプ後に徐々に落下していきます。

これがわかればスクリプトにジャンプ処理を追加する事は難しくありません。

また、今回のFPSゲームのジャンプ機能では

立っている時、歩いている時
走って移動している時

でジャンプ力を変更出来るようにします。

キャラクター操作スクリプトMyCharaにジャンプ処理を追加

では、キャラクター操作スクリプトMyCharaにジャンプ機能を取りつけていきます。

public var jumpPower : float; // 通常のジャンプ力
public var dashJumpPower : float; // 走っている時のジャンプ力

public変数で通常のジャンプ力のjumpPower、走っている時のジャンプ力dashJumpPowerを作成し、インスペクタで値を設定出来るようにします。

Input.GetButtonDown(“Jump”)でインプットマネジャーで設定されたJumpのキーやボタンが押された時にvelocityのY軸方向に値を足しています。

走っている時はrunFlagがオンでvelocity.magnitudeが0.1fより大きい時(前後左右の移動キーやジョイスティックが押されている時)はdashJumpPower、
それ以外の時はjumpPowerを足しています。

ジャンプキーは

↑のようにキャラクターが地面に接地している時にジャンプキーが押されたかどうかの判断がある為にジャンプ中は前後左右のキーの移動値は反映されません。

しかし、ジャンプ前のキーの移動値は反映されている為、斜めに進みながらジャンプをした場合は斜めの移動とジャンプの移動が合わさります。

これでFPSゲーム用のジャンプ機能が完成しました。

MyCharaのインスペクタでジャンプ力を設定する

MyCharaスクリプトのインスペクタでjumpPowerに5、dashJumpPowerに5.6を設定しました。

Unityの実行ボタンを押して確認してみましょう。

FPSゲームのジャンプ機能を確認する

立っている時、歩いている時、走っている時にジャンプが出来るようになりました。
また走っている時は通常のジャンプ時よりも高く飛んでいる事が確認出来ます。

いや・・・あんまりよくわからないような気もする・・・、dashJumpPowerの数値を上げて確認してみてください。

次回はキャラクターが銃を持っている時のアニメーションを作成していきます。