このページは、「UE5 ver5.3.2」の環境で制作されています
こんにちは! ウンパッパです!
今回から、本格的に「星翼復活計画」を始動します!
いままで汎用的なアクションゲームの実装方法を記事にしていましたが
ここから本格的にロボットアクション特有のシステムへと路線を移動します
その第一弾として今回は
ロボットゲーム特有のエンジンによる爆発的な移動
「ブーストダッシュ」を実装します!
ではまず、作る前に結果からみていこう こんな感じになるよ!
Shiftボタンを押したら一気に、「吹き飛ぶように」移動したね!
そしてBluePrintはこんな感じ
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-04-52-58-068-1024x395.jpg)
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-04-53-03-285-1024x395.jpg)
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-04-52-44-483-1024x448.jpg)
それでは、できる限りわかりやすく説明するから
早速作ってみよう!
命名の変更
今後の制作を考え、以下の名前を変更します
システム名
「スタミナ」⇒「エネルギー」
変数名
「fuel(燃料)」を「energy(エネルギー)」に変更します
Float変数
「MAX_boost_fuel」⇒「MAX_boost_energy」
「boost_fuel」⇒「boost_energy」
「boost_fuel_restore」⇒「boost_energy_restore」
「boost_fuel_dash_consumption」⇒「energy_consumption_dash」
Boolean変数
「Can_Refill_Fuel?」⇒「Can_Restore_Energy?」
「Is_Consumption Fuel?」⇒「Is_Consumption_Energy?」
仕様をまとめよう!
まず、今回実装したい物を分析して並べてみよう するとこんな感じになるよ
1. | キャラクターの向きを、常に正面に向くようにする |
2. | Shiftを押すと移動方向に「吹き飛ぶように」移動する |
3. | 移動入力しなくても「吹き飛ぶ」ように移動する |
4. | 「ブーストダッシュ」のエネルギーの消費量を設定する |
5. | Energyが0の時は「ブーストダッシュ」出来ない |
6. | 不具合「ブーストダッシュでスタミナを0にした時の回復に「5秒の待機時間」がない」の解決 |
これらの実装を目指して頑張っていこう!
仕様1.キャラクターの向きを、常に正面に向くようにする
まず、「ブーストダッシュ」を実装する前に
「星と翼のパラドクス」および、ロボットアクションゲーム特有の
「プレイヤーが常に正面を向き続ける」を実装しよう
これを先に実装しないと、「吹き飛ぶような移動」に移動向きを指定する際に
「カメラの方向」なのか「キャラの移動方向」なのかが混同して、混乱する羽目になるぞ
方法は簡単
キャラクターの「BluePrint」を開いて、コンポーネントの「BP_ThirdPersonCharacter(Self)」を選択
「詳細」の中にある「ポーン」の欄の「Use Controller Rotation Yaw」にチェックを入れるだけ
すると、キャラクターが常に正面のみを向くようになったね
仕様2.Shiftを押すと移動方向に「吹き飛ぶように」移動する
次に、「ブーストダッシュ」本体を実装するよ
まずは必要な変数をそろえよう
変数の型 | 名前 | 値 | 変数の説明 |
Float | boost_dash_strength | 2000 | 吹き飛ぶ強さ 値が上がるごとに「距離」と「スピード」が上がるよ |
変数の準備ができたら
こんな感じにノードを組んでね
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-00-58-43-728-1024x453.jpg)
今回使う「launch」ノードは直訳すると「打ち上げる」
「ロケットランチャー」の語源になっている言葉だね
このノードは「摩擦がない限り、指定の方向に強制的に移動させる」ことができるんだ
でも、地上だと摩擦力があってあまり移動できないから
「Use Separate Braking Friction」で摩擦を無くしてから実行しているよ
それと、ダッシュ中の「Max walk Speed」を「1000」に下げているよ
2000だと早すぎて「ブーストダッシュ」なのか「ダッシュ」なのか見分けがつかないからね
プレイするとこんな感じ
うん!移動方向に向かって「ブーストダッシュ」ができてるね!
その後問題無く「ダッシュ」もできてるよ
ただ、移動してないときは「ブーストダッシュ」ができない
この挙動には違和感があるから、移動してないときにもできるようにノードを組み換えよう
仕様3.移動入力しなくても「吹き飛ぶ」ように移動する
まずは一回、「移動しなくても吹き飛ぶ」を
既に組んだノードで組みなおしてみよう
今回は「カメラが向いている方向」に「ブーストダッシュ」するのが好ましいから
入力方向を取得する「Get Last Movement Input Vector」の代わりに
キャラクターの正面の向きを取得する「Get Actor Forward Vector」を
「Lunch」ノードに組み込もう
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-01-16-49-338-1024x543.jpg)
これで、Shiftを押すと同時に正面に向かって「ブーストダッシュ」するようになったね
後はこの「カメラが向いている方向」に「ブーストダッシュ」する挙動を
「移動していない」時のみに起動できれば完璧だ
移動してるかどうかを「Boolean変数」で取得して
「Branch」ノードで分岐してもらおう
まずこの変数を作ってね
変数の型 | 名前 | 値 | 変数の説明 |
Boolean | Is_Moveing_? | False | 移動ボタン(WASD、アナログパッド)を、 入力しているかどうかを取得する |
その後に、「Thirdpersonのスターターコンテンツ」にて既に制作してある
移動入力のノード群をこんな感じに組み替えてね
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-01-29-20-163-1024x559.jpg)
これで、移動入力をBoolean変数に取得することができたね
次に、「ブーストダッシュ」のノード群をBranchを使って組んでいこう
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-01-33-34-436-1024x750.jpg)
これで、移動しても移動してなくても「ブーストダッシュ」出来るようになったね
ノードがごちゃついてきたので「マクロ」にしまおう
ノードがごちゃついてきたので「マクロ」にしまうよ
今回のマクロの名前は「Boost_Dash」だ
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-01-51-48-350-1024x536.jpg)
整理された後の「ダッシュ」のノード群
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-01-56-53-060-1024x419.jpg)
すっきりしたね
もしマクロの使い方がわからないならこの記事を読んでね
仕様4.「ブーストダッシュ」のエネルギーの消費量を設定する
こんどはブーストダッシュにエネルギを消費させるようにするよ
まずは新しい変数を作ってね
変数の型 | 名前 | 値 | 変数の説明 |
Float | energy_consumption_boost_dash | 15 | 「ブーストダッシュ」時のエネルギー消費量 「ダッシュ」より多めに設定 |
そしたら、すでにある「ダッシュのエネルギー消費システム」をコピペして
「ブーストダッシュ」用に組みなおしてしまおう
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-01-58-52-466-1024x488.jpg)
組み終わったらコンパイルしてプレイしてみよう
うん!押すたびにしっかりと消費されているね!
仕様5.Energyが0の時は「ブーストダッシュ」出来ない
今の状態だとEnergyが0の時に「ブーストダッシュ」ができてしまうので
できないようにノードを組んでいこう
こんな感じになるよ
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-04-42-32-139-1024x409.jpg)
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-04-42-43-086-1024x662.jpg)
これで、スタミナが0の時には「ブーストダッシュ」ができなくなったよ
不具合「ブーストダッシュでスタミナを0にした時の回復に「5秒の待機時間」がない」の解決
今回のノードを組んだ場合
「ブーストダッシュでスタミナを0にした時の回復に「5秒の待機時間」がない」
という不具合が出るんだ
その解決のために、「スタミナが0になったら5秒間回復量を0にする」を
「ブーストダッシュ」に組み込むよ
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-05-07-28-234-1024x350.jpg)
![](https://unpappa3d.com/wp-content/uploads/2024/03/bandicam-2024-03-10-05-07-40-661-1024x514.jpg)
これでいったん解決だ
ただ、これが正しい修正方法だと思えないので
後日改めて解決を試みようと思うよ
次回!ダッシュしたらカメラが中心からずれる!
次回は「ダッシュしたらカメラが中心からずれる」を実装してみたいと思うよ!
下のボタンから次のページに進めるよ!
よかったら見ていってね!
【現在、鋭意制作中です】
コメント