その5:走ると高く跳べる(超能力)

※本サイトはアフィリエイト広告を利用しています。

連載第5回です。

前回速く走れるようになったキャラを、今度は速度でジャンプ力変わるように改造していきましょう。

空までジャンプしている玉ねぎちゃん

結論

キャラクターのBP(BP_ThirdPersonCharacter)のJumpのイベントで、Jumpする直前の水平面上の歩行速度を判定して、ジャンプの初速か力を加えられる時間(噴射時間)を変えましょう。

今回私は後者を選択し、Velocityが400超えたら0.8秒間、それ以下なら0.5秒間揚力を与え続けられるようにしました。

UE5のサードパーソンキャラクターのブループリントのジャンプ処理に、歩行速度に応じてジャンプ力を変更する処理を追加した図

あとは、重力を強めに、初速は下げて、ボタン押した長さでジャンプ力を調整可能にしました。

解説

まず、通常のジャンプ力に特に関係するパラメタは、主に下記の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秒噴射できるようにしました。この辺の値はステージ作っていく中で調整します。

適当な速さで走っているときは通常の0.5より長い0.8秒噴射できる処理を書いたブループリント

ちなみに、Velocityの3つめZの値で上昇方向の現在速度を変えるって手もあるかもしれませんが、モノにぶつかったときなどの条件分岐等考えるとちょっと複雑すぎるでしょう。

ということでVelocityが400以上か否かで処理を変えるというロジックにしました。

Lerpとかを使って段階的に切り替えると、よりマリオに忠実な表現が可能かと思います。

XY平面上の移動速度が400cm/sを超えたか判定するブループリント

Velocityは「Get Velocity」でキャラクター自身から取得するのと、上図のように「Character Movement」から取得できるものとありますが、おそらくどちらでも大差ないはずです。

あとは、横移動固定じゃなくて3DでXY平面上をどの向きにでも走れるので、VelocityはXやY方向の値直接ではなく、XY平面上のベクトルの長さで見るのも重要ですね。(横向きだととか前方だと高く跳べるけど・・・みたいなバグの原因)

つづく

ノーマル状態のキャラクターが大体完成しました。

次はミニ状態を作って、一旦キー入力でノーマルと切り替え可能にしてみます。

コメント

タイトルとURLをコピーしました