連載第5回です。
前回速く走れるようになったキャラを、今度は速度でジャンプ力変わるように改造していきましょう。
結論
キャラクターのBP(BP_ThirdPersonCharacter)のJumpのイベントで、Jumpする直前の水平面上の歩行速度を判定して、ジャンプの初速か力を加えられる時間(噴射時間)を変えましょう。
今回私は後者を選択し、Velocityが400超えたら0.8秒間、それ以下なら0.5秒間揚力を与え続けられるようにしました。
あとは、重力を強めに、初速は下げて、ボタン押した長さでジャンプ力を調整可能にしました。
解説
まず、通常のジャンプ力に特に関係するパラメタは、主に下記の3つが挙げられます。
- Jump Z Velocity:初期速度
- Gravity Scale:重力のかかり具合
- Jump Max Hold Time :ジャンプボタン押し続けたときいつまで揚力をかけ続けるか
※細かくみるともっとたくさんあります。
初速と重力の関係自体は割愛しますが、重力を強く受けるようにすると早く&速く落ちます。
揚力かける時間を延ばすとふわっと上がります。
これらを組み合わせて、初代マリオっぽい「ふわっと飛び上がってシュッと落ちる」「ボタン押す時間でジャンプ力調整できる」動きを再現してみたいと思います。
キャラクターのBPの詳細で設定を探します。
Gravity 重力
重力の影響を高めて「シュッと落ちる」ようにするため「Gravity Scale」を下図の1.75から2にあげて通常より速く落ちるようにしてみました。
揚力に重力が勝つ時間が短くなるので、結果的にジャンプの頂点も下がります。
Z Velocity 初速
「Jump Z Velocity」(全体だと結構下のほう)でジャンプした瞬間の速度(加速度)を調整します。
サードパーソンテンプレートのデフォルトは500cm/sだったと思いますが、これも少し下げました。
重力の影響を増やした上に初速も下げると、ジャンプできる高さがかなり下がります
が、これは次の項目で回収します。
Hold Time 噴射時間
「Jump Max Hold Time」はデフォルトだと0です。
なので、ジャンプした瞬間の「Jump Z Velocity」の速度で出発して、あとは重力に押し戻されて減速していき最終的に落下することになります。一瞬で燃料を全部一気に爆発させて飛ぶイメージですね。
これをたとえば5秒とかに設定すると、5秒間は地面を離れたあとも噴射し続けて昇る勢いが低下しないので、「ぐい~ん」とか「ふわっ」とした感じの動きになります。
横移動速度でジャンプ力変更のロジック
マリオに忠実ではありませんが、適当な速さで走っているときは通常の0.5より長い0.8秒噴射できるようにしました。この辺の値はステージ作っていく中で調整します。
ちなみに、Velocityの3つめZの値で上昇方向の現在速度を変えるって手もあるかもしれませんが、モノにぶつかったときなどの条件分岐等考えるとちょっと複雑すぎるでしょう。
ということでVelocityが400以上か否かで処理を変えるというロジックにしました。
あとは、横移動固定じゃなくて3DでXY平面上をどの向きにでも走れるので、VelocityはXやY方向の値直接ではなく、XY平面上のベクトルの長さで見るのも重要ですね。(横向きだととか前方だと高く跳べるけど・・・みたいなバグの原因)
つづく
ノーマル状態のキャラクターが大体完成しました。
次はミニ状態を作って、一旦キー入力でノーマルと切り替え可能にしてみます。
コメント