第8回「Anthemっぽい飛行-その2」

前回組んだ飛行のBPをとりあえずそのままオリロボの方へ持ってきて移植。

その後の調整メモです。

調整内容は下記の4つ+α。

⓪飛行モードの加減速(没)

①飛行モード移行時の加速度をつける

②飛行モード中の超加速

③ハイブースト、グライドブーストとの調整

④衝突判定をつける

今回は無駄に長いです。

⓪飛行モードの加減速(没)

もともと左スティックでキャラを中心に上下左右に動くようにしていたのですが、上下の移動を廃止してスティック上下で速度の加減速を行うようにしようと思って組んだのが下記のBPです。

左スティックの上下入力を取得するところにUE4のFlyingベースにあった加減速のBPをそのまま流用してます。

これで飛行時の加減速ができるようになるのですが……。

よくよく考えてみると作ろうとしているゲームにおいて飛行モードをどのように使おうかと思案した結果、アーマード・コアのオーバーブーストのような使用になるかな?と思ったので加減速はやっぱり不要だなぁ、という結論に。

というわけでこれは没としました。

なので左スティックの上下左右でキャラも上下左右に動くBPで進めていきます。

第7回のBPの組み方で進めます)

①飛行速度の加減速をつける

飛行モードに移行した際に前回のままのBPだといきなり最高速度で飛んでいってしまうため、初速から加速して最高速度になるようなBPを追加しました。

まず関数を2種類作ります。

・FlyingSpeed

まず下記の変数を用意

・FlyingModeSpeed(飛行中の速度の変数)

・FlyingMaxSpeed(飛行中の最高速度)

・FlyingMinSpeed(飛行中の最低速度)

・FlyingMoodAcceleration(飛行速度の加速度)

それを没にした⓪番のBPを参考に画像の様に組みます。

これでFlyingModeSpeedがFlyingMaxSpeedに達するまでFlyingMoodAccelerationが足されていく関数ができました。

しかしこれだけだとFlyingMinSpeedに戻らないため、別で下記の関数を作ります。

・FlyingSpeedReset

上画像のBPこれでFlyingModeSpeedがFlyingMinSpeedにリセットするようにします。

※この処理のためにFlyingModeSpeedの値=FlyingMinSpeedの値にしておく必要あり(でないと最初の速度と次から使用した速度で違いが出てしまう)

正直もっとうまい方法あるような気がするのですが……誰か教えてください…

そうして組んだ関数を下記の場所に埋め込みます。

上記BP拡大1
上記BP拡大2

これでいきなり最高速度になることはなくなりました。

②飛行モード中の超加速

第5回目の時のように飛行モード中にジャンプボタンを押すことで加速するようにします。

まずカスタムイベントFlyingMpdeBoostを作り、画像の様にBPを設定します。

これは一気に最高速度でかっとぶイメージなのでFlyingMaxSpeedにFlyingModeSpeedmagnificationという変数をかけています。

(現状の設定ではFlyingMaxSpeedの3倍の速度で飛ぶようにしています)

次にカスタムイベントFlyingMpdeBoostにtickを流す個所を第5回の時に作ったグライドブースト中にジャンプボタンで加速の箇所に入れます。

これで飛行モード中にジャンプボタンを押している間は超加速するようになりました。

③ハイブースト、グライドブーストとの調整

・ハイブーストの調整

飛行中にハイブーストを使用すると上下左右に緊急回避するようにしたいので飛行中のスティック変数を取得し、その方向へVelocityを加えるようにします。

下記画像の様に飛行中のスティック情報を変数として取得し、第5回で関数化したハイブーストのBPに飛行中のスティック情報を加えます。

※スティック変数の取得は第4回を参照

飛行中の左スティックの変数を取得
ハイブースト関数のBPに飛行中のハイブーストを追加

なお飛行中のスティック変数のX,Z方向に0.5をかけているのはそのままだと移動しすぎてしまうため移動を弱くする目的で入れています。

とりあえずこれで飛行中は上下左右にハイブーストできるようになりました。

・グライドブーストの調整

今作っているゲームではハイブーストボタンを押しっぱなしでグライドブーストへ移行するように設定しているため、飛行中はハイブーストボタンを押しっぱなしにしてもグライドブーストが発動しないようにする必要があります。

そのため下記の箇所にBranchを入れて飛行中はグライドブーストへtickが流れないようにしました。

上記BPの拡大

グライドブーストの処理は、下記の様になっています。(第5回参照)

ハイブーストボタンを押しっぱなし

→グライドブースト(SetMovementModeがFlyingになる)

→ボタンを放すと歩行モードへ(SetMovementModeがWalkingになる)

という処理になっており、飛行中は両方のBPにtickが流れないようにしないと飛行中にハイブーストボタンを押したときにグライドブーストへ移行してしまったり、モードがWalkingになって重力が働いてしまったりしてしまいます。

※実際止めるBPを入れ忘れてハイブーストボタン押したらなんで落下すんの!?って小一時間悩みました。

④衝突判定をつける

これは第6回の時に壁衝突判定の関数を作っているのでそれをそのまま流用。

上記BPの拡大

カスタムイベントFlyingHitWallを作成し、EventTickを流す。

そして飛行中に壁に当たった場合に飛行モードOFFにtickが流れるようにしています。

ちなみに第7回に記載しているBPは飛行モードの切り替えをFlipFlop(交互に実行する)で行っていましたが、それで設定すると衝突判定で飛行モードがOFFになったときに再度飛行モードボタンを押しても一回飛行モードOFFにtickが流れて今うためBranchに変更していたりします。

とりあえず以上でオリロボにAnthemっぽい飛行を実装できました。

……これAnthemっぽさもはや皆無ですね。

ほんとは下向くと重力加速度も飛行速度に追加されるようにしたいのですが、いかんせんそこまで突っ込むと色々難しそうなのでそれはいつかの機会にして先に進めようと思います。

次回は「カメラのラグ追加」

動画見ればわかるんですがこのブログ書いてる時点で実はすでに実装できてます。

今回が長ったらしかった分、次回はさっぱり目で。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です