[UE4]プレイヤーの移動速度を徐々に上げる

いきなり最高速度に達すると不自然なので、徐々に移動速度を上げる処理を入れます。


参考動画

カイさん( @UnrealYoshida )のこの動画

にあるタイムラインを使って徐々に速度を上げるネタなのですが、

カイさんの動画と違う点が、「スプリントキー」の有無です。


スプリントキーとは?

スプリントキーとは、押されているとき、もしくはトグル式でオン判定になっているときにプレイヤーの移動速度を上げ、全力疾走します。

最近のPCやコンシューマーのアクションゲームでおなじみのアレです。

『MGSV』とか『ゴーストリコン ワイルドランズ』とかは左スティック押し込みだし、

『FFXV』だったら〇ボタン押しっぱなしだったりします。


今回はスプリントキーなしで。

スプリントキーを入れずに、左スティックを傾けたら、徐々にスプリントと同じように最高速度で走ってくれるようにしたいと思います。

『アサクリオリジンズ/オデッセイ』や『DMCV』がこの方式でしたね。


やり方

カイさんの動画と同じように、タイムラインをつくり、floatの返り値を設定し、そこにCharacter movement内のパラメータ「max walk speed」をつないで、タイムラインのfloatの値が代入されるようにしておく。

画像1

↑このへんはカイさんの動画と同じ。


スプリントキーではなく、左スティックもしくはWASDを入力しているとタイムラインをplayし、徐々に速度を上げる。

画像2

↑青丸で囲ったところですが、スティックの入力のAxis Valueが0じゃなかったらタイムラインをPlay、0だったらreverseするようにして速度を戻しています。

うちのゲームではしゃがみもあるので、しゃがみ用に別のタイムラインも用意し、しゃがんでるか判定を挟んで分岐もさせています。

スティック入力しかないゲームならこれだけでいいのですが、WASDキーでの移動もさせたい場合、これだけだとスピードが上がらないという症状が起きました。

そのため、ちょっと力業ですがこんなことをやってみました。


画像3

↑bool変数「Is Move from Keyborad」を用意し、WASDキーのPresscedされていたら、 「Is Move from Keyborad」 がtrueになり、Releasedされたらfalseにしています。


追記

「Is Move from Keyborad」 1つを使って判定を取ろうとすると、WキーとDキーを同時に押したりしたとき等に速度が急激に下がったまま、上がらなくなるという現象を確認したため、WASDキーごとにboolを用意し、それをORに突っ込む形に変更しました。

画像4

↑「Is Move from Keyborad」 は、スティックのAxisの条件分岐のところに、OR Boolに追加して、いずれかがtrueならplayするようにしました。

こうすることで、スティックからもキーボードからも速度が徐々に上がって走ってもらえるようになりました。

ただ、これだいぶ力業な気がするので、真似するなら自己責任で。。。

この記事が気に入ったらサポートをしてみませんか?