このページは、「UE5 ver5.3.2」の環境で制作されています
こんにちは!
ウンパッパです!
今回は、スタミナシステムとダッシュしたらスタミナが減るシステムを作るよ!
詳しく描くのでかなりのページ量になるから回復システムは次回に持ち越しだよ
ではまず、作る前に結果からみていこう
こんな感じになるよ!
ダッシュすると左上にある数字が減る
歩くと数字の減りが止まって
0になると走れなくなる
これを目指してさっそく作っていこう!
仕様をまとめよう!
まず、今回実装したい物を分析して並べてみよう
こんな感じになるよ
1. | 変数に「Max_boost_fuel」「boost_fuel」「boost_fuel_consumption」を用意する |
2. | 「boost_fuel_consumption」が「boost_fuel」を引くの数式を実装する |
3. | ダッシュすると「boost_fuel」-「boost_fuel_consumption」が実行され続ける |
4. | ダッシュしないと「boost_fuel」-「boost_fuel_consumption」を中止する |
5. | 「boost_fuel」が0になるとダッシュできなくなる |
+α | 移動してない間、ダッシュボタンを押してもスタミナを消費しない |
これらの実装を目指して作っていこう!
仕様1.変数を用意しよう!
変数へのざっくり説明
変数を用意する前にざっくりと説明
変数とはシステムに組み込まれた「パラメーター」だよ
よく、「中身を入れ替えられるデータの箱」とたとえられることが多いね
ゲームは基本的に
ゲームに組まれたシステム(関数)とシステムに組まれたパラメーター(変数)
で構成されていて、システムを組んでパラメーターを入れることで
様々な「動き」や「フラグ」が実装されるんだ
今回の場合だと「ダッシュ」というシステム(関数)に
スタミナというパラメーター(変数)を入れる感じだね
変数を作ろう!
というわけで早速変数を作るよ
変数はBluePrintのここから作ることができるよ!
今回作る変数はこれ
No. | 変数の型 | 変数の名前 | 入れる値 | 変数の説明 |
1. | Float | boost_fuel | 100 | 現在のスタミナ これが0になったら走れなくなるよ |
2. | Float | Max_boost_fuel | 100 | スタミナの最大値 ここでスタミナの上限を決めるよ |
3. | Float | boost_fuel_dash_consumption | 3 | ダッシュによるスタミナの減少値 走ると毎秒この値分最大値が減るよ |
各種値を変数の詳細に入れていくよ
ちなみに、変数に値を入れる際は気を付けて
コンパイルしないとデフォルトの値は入れられないよ
そして、変数の一覧がこんな感じになったら設定完了だね!
小技:変数をカテゴリ別にまとめよう!
ゲームには、それはもうたくさんのパラメーター(変数)があるよね
「攻撃力」「防御力」「体力」「魔力」「力」「速度」「使用回数」「使用可能回数」他もろもろ…
おそらく50や100じゃ足りないくらいの変数を扱うことになる
なのに、すべて同じ場所に置いてたら、何が何だか分からなくなるよね?
これを毎度扱うとなると気が遠くなるし
心が折れるよね、絶対
というわけで、画像みたいにごちゃごちゃにならないよう
「カテゴリーに分けてまとめる」方法を教えるよ
下の記事に書いてあるからよかったら見ていってね!
使用2.「boost_fuel_consumption」が「boost_fuel」を引くの数式を実装する
次に、「boost_fuel_consumption」が「boost_fuel」を引くの数式を実装するために
BluePrintで簡単な引き算の計算式を作っていくよ
変数の「Get」と「Set」
BluePrint上で計算をするためには基本的に変数で計算するんだ
そのためにも変数の「Get」と「Set」を理解しよう!
軽く解説するから
どれがどれなのか注意しながら作っていこう
「Get」について
これが「Get」今の値
今現在のその「パラメーター」の数字を引っ張り出すことがるんだ
例えば、「回復薬で「今のHP」を増やした」や「走って「今のスタミナ」を消費した」
などの状況に使われるんだ
基本的にはいろいろな計算をするために、計算式につなげることが多いいよ
この画像の場合だと
「今のスタミナの値」-「今のスタミナ消費の値」=「新しく上書きされる値」
になるね
さらに「新しく上書きされる値」は、上書きがされた瞬間(ノードが起動した瞬間)
「今のスタミナの値」に変化するから
画像のノードを何回も繰り返すシステムを組むだけで「スタミナが消費し続ける」が完成するんだ
「Set」について
これが「Set」変更する値
このノードを起動した場合値がこれに上書きされるよ
例えば「歩く」「走る」の切り替えも
この「変更する値による上書き」によって変更されるんだ
例えば、RPGにおいて「最終的な攻撃力」という値を出す場合
「基礎能力」「武器攻撃力」「バフの加算」「クリティカルの加算」「そのほか能力による加算」
などの様々な値による複雑な計算の最後に「Set」ノードが使われるんだ
これで「Get」と「Set」を軽く知ったと思うから
次はこれらを使って計算式を組み立てていくよ
ノードで計算式を組み立てる
じゃあさっそく答えを見に行こう
これが「boost_fuel_consumption」が「boost_fuel」を引くの数式だよ
まず
「boost_fuel_consumption」が「boost_fuel」を引いているよ
その引かれた値が「Clamp(Float)」ノードのValueにつながっているね
そして「Max_boost_fuel」が「Clamp(Float)」ノードのMaxにつながっているよ
この「Clamp(Float)」は上限と下限を決め、その間の数字の変化を受け入れるノードだよ
詳しくは下のページから!
これで
今の「BoostFuel」は「boost_fuel_consumption」が「boost_fuel」を引いた値である
ただし下限は「0」、上限は「Max_boost_fuel」である
というノードのつながり方が出来上がる
これで引き算の完成だ
詳しいノードの組み方は、こんな感じ
変数の「Get」と「Set」は変数を直接ノードエディターの上にドラッグ&ドロップすれば
どちらかを生成するボタンが出てくるよ
「引き算ノード」は検索欄から「-(マイナス)」か「subtract」と入力すれば出てくるよ
仕様3.ダッシュすると「boost_fuel」-「boost_fuel_consumption」が実行される
まず完成した「BluePrint」から
これが「ダッシュするとスタミナを消費する」のノード群だ
具体的には
- Shiftを押すと、スタミナを消費する
- Shiftを押し続けると、スタミナ消費し続ける
- Shiftを離すと、スタミナ消費が停止する
- 「boost_fuel」=「0」の場合、スタミナ消費を停止する
- 「boost_fuel」=「0」の場合、歩きに切り替わる
が実装されているよ
では、これらのノードをどうしてこの形に組んだのか説明するよ
Shiftを押すとスタミナを消費し続ける
ではまず、Shiftを押すとスタミナを消費すし続けるノードを作るよ
今回は「ダッシュのシステム」を起動したら「スタミナ消費システム」を起動する
「スタミナ消費システム」を起動したら「スタミナ消費」がループする
という実装をしたいから「カスタムイベント」を使うよ
カスタムイベントについて
まず、この「CustomEvent」ノードで
「ダッシュ」が実行されたときに「Boost Fuelの引き算」を実行される
ようにしているよ
この「CustomEvent」ノードは
青い「入力ノード」が実行された場合、赤い「出力ノード」が実行されるようになっているんだ
ちなみに、このノードは別になくても仕様は実装できるんだけど
使わない場合は「複数の処理を一つのノード群ですべて処理」しなきゃいけなくなるから
たこ足どころじゃない地獄のノード配線になるんだ
なので、こんがらがって萎え落ちしないためにも積極的に使おうね!
「Delay」ノードについて
それで、
これだけだと「Shiftが押されている間何秒間、何回実行するか」を設定してないから
世にも恐ろしい「無限ループ」が起こるんだ
というわけで「無限ループ」防止のために「Delay」ノードを使うよ
この「Retriggerable Delay」ノードは実行と実行の間に遅延を入れるノードだよ
これによって1回の長押しに無限回の計算を実行させずに済むんだ
さて、「スタミナを消費し続ける」は実装できたけど
このままだと「一度Shiftを押を押したらスタミナが消費されて止まらない」状態になっちゃうんだ
だから「ダッシュしない場合はスタミナを消費しない」ノードを組み立てるよ
仕様4.ダッシュしないと「boost_fuel」-「boost_fuel_consumption」を中止する
完成されたBluePrintには
「Boolean変数」と「Branch」ノードが使用されているね
左の「Boolean変数」とは「True(On)」と「False(Off)」を判定する変数
右の「Branch」ノードはTrueかFalseかで分岐を作るノード
この2種類のノードを使って
「Shiftを押してたらスタミナ消費をループ」
「Shiftを放してたらたらスタミナ消費のループから外れる」
という分岐ノードを組んでみよう
今後たくさんこの分岐ノードを使用すると思うからしっかりと覚えていこうね!
「Boolean変数」で「Is_Consumption_Fuel」を作る
「Boolean変数」は名前通り変数なので
BluePrint画面の左下にある変数の「+(プラス)ボタン」から生成できるよ
名前は「Is_Consumption_Fuel」にして
Boolean変数の値をFals(チェック無し)にすればOKだ!
実際に分岐点を作ってみる
まず、
「Shiftを押してたらスタミナ消費をループ」
「Shiftを放してたらたらスタミナ消費のループから外れる」
という一文にて、
Shiftを押してる時は「True」
Shiftを離しているときは「False」
にするシステムを実装していくよ
「Boolean変数」のチェックボックスに、チェックが入っている変数が「True」だ
これでShiftを押したら変数の値がTrueに
Shiftを離したら変数の値がFalseに
上書きされるノードになったね
Brunchノードで分岐点を作る
次に
「Trueならループする」
「Falseならループから外れる」
という分岐点を作ろう
先ほどShiftボタンに設定した「Is_Consumption_Fuel」を条件として引用するために
「Branch」ノードにつないでいくよ
これで引用完了
次にTrueに「ループする」を、Falseに「ループから外れる」を仕込もう
するとこうなるよ
これでノードの組み立ては完了だ!
「Print String」を使ってスタミナの「値」を見る
組みあがったノードでプレイすれば
「ダッシュすると「boost_fuel」-「boost_fuel_consumption」する」
が実行されるんだけど…
このままだど確認しようがないので「Print String」ノードを使って
値の変化をプレイ画面上に表示してもらおう
これで、今現在消費されている「Boost Fuel」がリアルタイムで表示されるよ
それじゃあ確認しに行ってみよう!
うん!ダッシュしたら数字が減って
ダッシュを止めたら数字が止まる
いい感じだね!
でも、スタミナが0になっても走り続けられるよね?
そう、まだこのノード群には「スタミナが0になったら歩きになる」システムが組まれていないのである
仕様4.「boost_fuel」が0になるとダッシュできなくなる
さて、ダッシュすると「Boost Fuel」が減るようになったから
今度は「「boost_fuel」が0になったらダッシュできなくなる」を実装しよう!
完成したBPはこんな感じ
ピンクの枠が主な改変点
「Shiftを押し続けたとしても、スタミナが0ならループから外れる」ようにしたよ
ただループから外れてもスピードはそのままなので速度変更も追加しました
では実際にプレイしてみよう!
うん!ちゃんとスタミナが0になったら止まってる
これで「スタミナシステム」と「スタミナ消費システム」の完成だね!
+α.移動してない間、ダッシュボタンを押してもスタミナを消費しない
一般的なアクションゲームなら実装されるシステムだけど
僕が作りたいゲームには必要ないからあえて実装しないよ
知りたい人がいると思って記事を作ってみました
よかったら読んでね
次回!「スタミナ回復を実装しよう!」
次回は、「スタミナ回復システム」を実装してみたいと思うよ!
下のボタンから次のページに進めから
よかったら見ていってね!
コメント