前回の記事でFPSゲームのキャラクターの向きと視点の上下の機能が出来ました。
今回はキャラクターがジャンプ出来るようにして一通りのキャラクターの移動機能を完成させます。
別の記事でUnityでジャンプ機能を搭載する方法を書いているので、
こちらを参考にするとすぐさま出来上がります。(^^)v
FPSゲーム用のジャンプ機能を考える
改めてまた同じような記事を作る必要もないのですが、FPSカテゴリなのでまぁいいでしょう(謎)
ただ通常のアクションゲームのジャンプ機能ではジャンプのアニメーションを再生するようにしますが、今回はジャンプボタンを押す前のアニメーションのままで
いきましょう。
何かよさげなジャンプアニメーションがあればそちらをアニメーターコントローラーの状態として作り遷移を繋げてください。
なぜアニメーションを付けないかは言わずもがな単純に制御が面倒くさい事になるので、直前のアニメーションのままジャンプさせて楽をします(^。^)
ではジャンプ機能を実現させる方法を考えましょう。
上記のリンク先で解説しているので、そちらをご覧いただいてもかまいません。
キャラクターの手前と奥、左と右に移動する機能はすでに作成してあり、それぞれZ軸、X軸を変更し移動しています。
ジャンプの場合はキャラクターが上下に移動するのでY軸を操作する事になります。
(それぞれの軸の値の操作はCharacterControllerの機能で変更されるので直接値を変更はしていません)
Y軸の値を変更する事でキャラクターが上下に移動するのでCharacterControllerのMove関数の引数に渡すVector3のYの値を操作する事でジャンプ機能が実現出来ます。
キャラクターにかかる重力の機能はすでに作成していますので、キャラクターはジャンプ後に徐々に落下していきます。
これがわかればスクリプトにジャンプ処理を追加する事は難しくありません。
また、今回のFPSゲームのジャンプ機能では
立っている時、歩いている時
走って移動している時
でジャンプ力を変更出来るようにします。
キャラクター操作スクリプトMyCharaにジャンプ処理を追加
では、キャラクター操作スクリプトMyCharaにジャンプ機能を取りつけていきます。
1 2 3 4 5 6 7 8 | // 通常のジャンプ力 [SerializeField] private float jumpPower = 5f; // 走っている時のジャンプ力 [SerializeField] private float dashJumpPower = 5.6f; |
public変数で通常のジャンプ力のjumpPower、走っている時のジャンプ力dashJumpPowerを作成し、インスペクタで値を設定出来るようにします。
キャラクターが接地している時にJumpボタンを押した時にジャンプ出来るようにします。
1 2 3 4 5 6 7 8 9 10 | if(Input.GetButtonDown("Jump")) { // 走って移動している時はジャンプ力を上げる if(runFlag && velocity.magnitude > 0f) { velocity.y += dashJumpPower; } else { velocity.y += jumpPower; } } |
Input.GetButtonDown(“Jump”)でInputManagerで設定されたJumpのキーやボタンが押された時にvelocityのY軸方向に値を足しています。
走っている時はrunFlagがオンでvelocity.magnitudeが0.1fより大きい時(前後左右の移動キーやジョイスティックが押されている時)はdashJumpPower、
それ以外の時はjumpPowerを足しています。
ジャンプキーは
1 2 3 4 5 | if(cCon.isGrounded) { ジャンプキーが押されたかどうか } |
↑のようにキャラクターが地面に接地している時にジャンプキーが押されたかどうかの判断がある為にジャンプ中は前後左右のキーの移動値は反映されません。
しかし、ジャンプ前のキーの移動値は反映されている為、斜めに進みながらジャンプをした場合は斜めの移動とジャンプの移動が合わさります。
これでFPSゲーム用のジャンプ機能が完成しました。
MyCharaスクリプトのインスペクタでjumpPowerに5、dashJumpPowerに5.6を設定しました。
Unityの実行ボタンを押して確認してみましょう。
立っている時、歩いている時、走っている時にジャンプが出来るようになりました。
また走っている時は通常のジャンプ時よりも高く飛んでいる事が確認出来ます。
いや・・・あんまりよくわからないような気もする・・・、dashJumpPowerの数値を上げて確認してみてください。
次回はキャラクターが銃を持っている時のアニメーションを作成していきます。