第4回「ACの動きを目指す―ハイブーストもどき編―」

前回に引き続きUE4でアーマードコアVのハイブーストもどきが出来たので、その作り方メモ。

ちなみに前回も触れていましたが、今回のBPは下記の注意点があります。

・ 「Third Person Template」 を使用

・下記のところにチェックを入れている

以上がされていないと同じようなBPを組んでも位置の基準の違いなどで別の挙動になる恐れがあります。

未来の、組んだBP忘れちゃってるだろう自分よ、要注意だぞ!そのための備忘録なんだから……

という訳でこんな動きになるという動画。

まずはBPの全体像

DoOnceとDelayを利用しハイブーストを吹かす時間とリロードの時間を作る。ブーストを吹かしている時間分、キャラクターをコントローラースティック方向に加速させるtickが流れる、という流れになっています。

①ハイブーストを吹かす時間(加速を与える時間)とリロード時間

まずDoOnceにtickが流れることでボタンを連打してもtickが流れないようにする。

そして最初に流れるtickでGateをOpenさせ加速処理にEventTickを流す。

Delayで指定した時間後にGateのCloseにtickが流れ、加速処理に流れているEventTickをせき止める。=これがキャラクターを加速させる時間(ハイブーストを吹かす時間)となる。

またさらにDelayで指定した時間後にDoOnceのRsetにtickを流すことによって再びボタンの受付ができるようになる。=これがハイブーストのリロードタイムとなる。

ここら辺は説明読むより画像見てもらった方が分かりやすいかもですね。

②キャラクターをコントローラーのスティック方向に加速させる

まずはコントローラーのスティック方向を取得する

これは「Third Person Template」の「MobementInput」に画像のBPを追加することで取得する。

参考:BluePrintで左スティックキャラ前方(or後方or右方or左方)なのかどうか取得する方法

あとはスティックの方向に変数を掛けて加速させるだけ。

なお、スティックがニュートラル(値が0の時)はキャラクター(のカプセルを軸とした)の前方向に変数を掛けて前方にハイブーストする仕様になってます。

ちなみにこの処理をしない場合、ニュートラルでハイブーストボタンを押すと0×変数となるためキャラクターの速度が完全に0になりその場でビタッと停止してしまいます。それはそれで面白そうではあるけれど、今回は使用予定はありません。

こっからは余談

またスティックの方向に「×」ではなく「+」を使用すると、X,Y座標軸で考えれば当たり前なんですが、下記のような結果になりキャラが斜めに吹っ飛んでいきます。

仮にスティックを左下に倒したときx=-1、y=-1とする。また変数を+300とすると

スティック方向×変数=(-1、-1)×300=(-300、-300)

→左下に300の速度が与えられる・・・〇

スティック方向+変数=(-1、-1)+300=(299、299)

→右上に299の速度が与えられる・・・×

という感じ。

考えてみれば当たり前なんですけど、最初この考えに至らず+を使ってしまいキャラが斜めに吹っ飛んでしまったのでメモ。

……こんなのに引っかかるの自分だけだろうけど、備忘録だからいいのです!

とりあえず以上でハイブーストもどき完成。

本家はハイブースト発動までに若干チャージがあってその時のボタンの押し込み具合で若干ハイブーストの強さが変わったりと変態的な仕様になってますが、少なくともそこまで作るつもりはありません。フロムは変態すぎる……。

クイックターンも作ろうかと思いましたが、考えてるゲームの仕様的に不要な気がしてきたのでとりあえず今後はブーストドライブ(壁蹴り)とグライドブースト(空中でも使用できるように考えてます)に挑戦予定。

……また高い壁になりそうだなぁ、これ。

次回「ACの動きを目指す―壁蹴りorグライドブースト編―」

来月更新は多分無理!!

第3回「ACの動きを目指す―ブーストON/OFFもどき編―」

UE4でアーマードコアVのブーストON/OFFもどきができたので作り方メモ。

<注意>

ちなみにベースはUE4の「Third Person Template」を使用。

また前回記事の箇所にチェックを入れてることを前提にしてます

ここが違っているとキャラの位置の取得とかの関係で同じBPを組んでも違う結果になってしまうので注意(特に次回のハイブーストもどきづくりでは関係してきます)

まずはブーストON/OFFのBP全体画像

ブーストモードの切り替えtickが流れるとブーストON時のパラメーターとOFF時のパラメーターを交互に上書きしていく流れになっています。といってもこれだけだと何が何だかなので以下に詳細を記載

①ブーストモードの切り替え

これはもう画像の通り。ゲーム開始時はOFFのパラメーターがキャラクターに上書きされ、ボタンを押すとONのパラメーターが上書きされる。それを繰り返す流れになってます

②ブーストON時のパラメーター

1.パラメーターの上書き

まずブーストONにtickが流れると下記のCharacterMovementを書き換える

参考:【UE4】UCharacterMovementComponentのAPIリファレンスを翻訳してみる

ここで書き換えるパラメーターは下記の3つ

「MaxWalkSpeed」

歩行時の最高速度。ここではブーストON時の移動速度になる。

「GroundFriction」

地面の摩擦の強さ。地面上でのすべりやすさ。本家の動きを見ると慣性でスティックを放しても進行方向に少し滑っているように見えたので、ここで数値を低くしてキャラクターを少し滑るようにしている。

「AirControl」

空中での移動のしやすさ。0~1の範囲で決められ、0にすると空中での制御が全く効かなくなる。1にすると地上と同じぐらい制御できるようになる。

2.空中にいるかどうかの判定

まずキャラクターが空中にいるかいないかを「Is Falling」で判定。それをしておかないと画像のBPでは坂を下っていても上向きの力がかかってしまいます

3.落下中にホバリング

次にキャラクターが落下中かどうかを判定。これはどうすればいいのか分からずUE4 answerhubで質問したら回答をいただけました

参考:UE4 answerhub 落下中のキャラクターに上向きの力を加えて落下をゆっくりにしたい

要はキャラクターの速度ベクトルが-(下に下がる)になっているかを判定することで対応しました

あとはその時にターゲットの速度に上向きの力(ホバリングの浮力の力)をくわえるようなBPにしてあります

③ブーストOFF時のパラメーター

こちらはtickが流れたときにブーストONで上書きされたパラメーターをもとの値で上書きするというBPになってます。なのでON時のパラメーターと同じ項目をいじりましょう。

以上でACVのブーストON/OFFもどきを実装できました。細かい挙動は本家と違うけど、そこらへんは調整してお好みの挙動にしましょう。今はまだグレーボクシングを作っている段階なのでそこまでの調整は不要かと思ってます。本家まんま再現する気もないですし、とりあえず一旦完成ということで。

というかもっと改善する方法あると思うのですが今はこれが精いっぱい。もっとこうした方がいいよとアドバイスありましたら、メッセージか何かいただけると感謝感謝でございます。

次回は「ACの動きを目指す―ハイブーストもどき編―」です。