23.四つの変数の応用
変数の応用編として変数を使ってプレイヤーのHPを実装していきます。実際のゲームでもプレイヤーのHPは変数を用いて実装していきます。今回はその基礎の作り方について学んで行きます。
🌟今回実装する機能
今回はテキストでプレイヤーのHPを表現する機能を作っていきます。HPバーなどのUI(画像)の部分は作成しませんが、今回はそのプログラムの部分の基礎といった形になります。UIの作り方については別の章で解説するので、今回は簡単にプレイヤーのHPをテキスト表示する機能を実装していきます。
https://scrapbox.io/files/65b71707cbf3a60024eab750.jpg
具体的に何を実装するのかというと、プレイヤーのHPに100を初期値として、Enterキーを押したら敵から攻撃を受けたていで、ランダムな数値分をHPから減らします。そしてHPが0以下になった時点で「ゲームオーバー!」とテキスト表示します。
🐈:実際のゲームでもキャラや敵のHPを実装する時には今回の手順のように変数を使用していきます。では変数を学ぶためにもプレイヤーのHPの実装にチャレンジしてみましょう!
🌟Step1:プレイヤーのHPを作成して表示してみよう
レベルブループリントを開き、変数のプラスボタンを押して追加して名前を「PlayerHP」にして、Integer型にします。
https://scrapbox.io/files/65b717d1acc7ca0024716ee1.jpg
一度コンパイルしてPlayerHPの変数を選択した状態で、デフォルト値を100にします。
https://scrapbox.io/files/65b717eac5a7120023179e4f.jpg
そのままイベントグラフに、イベントBeginPlayノードからPrintStringノードを作成します。
https://scrapbox.io/files/65b7181576972900241ae595.jpg
PrintStringのInStringピンからドラッグしてAppendノードを作成します。
https://scrapbox.io/files/65b71845dd2a5e0025e88434.gif
なおノード選択時のノード一覧の右上の「状況に合わせた表示」にチェックが入っていればAppendノードは一個しか表示されないので間違えようがありませんが、チェックを外した状態でAppendノードを検索すると複数の種類Appendノードが出てきてしまいます。ストリングのカテゴリのAppendノードが今回作成するノードになります。
https://scrapbox.io/files/65b8a433394c5b00257727c1.jpg
ストリングのカテゴリのAppendノードが今回作成するノードになります。
Appendノードとは?
https://scrapbox.io/files/65b8a4d8dccfa700259e4380.jpg
Appendノードとはテキストを結合して出力するノードです。なので上の様にAに「こんにちは、」Bに「皆さん」となっている場合、ReturnValueから「こんにちは、皆さん」というテキストが出力されてテキスト表示されます↓
https://scrapbox.io/files/65b8a60523b90400230ac0c5.jpg
手順に戻って「プレイヤーのHPは」とAのピンに入力します。
https://scrapbox.io/files/65b8a65067ee6f00259f831a.jpg
PlayerHP変数をドラッグして追加し、AppendのBピンに接続します。
https://scrapbox.io/files/65b8a66f5c58e30024724bab.gif
こんな感じになりました↓
https://scrapbox.io/files/65b8a7307347f80026c25b94.jpg
プレイしてみて確認してみましょう。ゲーム開始時に「プレイヤーのHPは100」とテキスト表示されました。
🌟Step2:プレイヤーのHPからランダム数値分減らす
ではここから敵からダメージを受けたていで、HPからランダムに数値を減らしてテキスト表示していきます。
では作成していたレベルブループリントにノードを追加していきます。
「Enter」と検索してEnterキーノードを作成します。
https://scrapbox.io/files/65b8b8fdbe9712002364e76d.gif
Enterノードとは?
EnterノードはEnterキーを押したときに繋げたノードが実行されるノードです。前回のページで「F」ノードを使用しましたがそれと同じでキー入力時に実行されるノードになります。Pressedが押した時、Releasedが離した時に実行されます。ちなみにノードの色は赤色なのでノードの種類で言うと「イベント」にあたります。イベントノードはノードがいつ実行されるのか決めるためのノードになります。
PrintStringノードを作成して「敵が攻撃してきた!プレイヤーはダメージを受けた」と入力します。
https://scrapbox.io/files/65b8b94767ee6f0025a12eea.jpg
PrintStringからSetPlayerHPノードを作成し、セットノードから「-」と検索し減算するノードを追加します。その後減算ノードの上のピンでGetPlayerHPノードを作成します。(ドラッグで変数のノードは追加してもらっても構いません)
https://scrapbox.io/files/65b8b96f7ec1070024042db4.gif
こんな感じになりました↓
https://scrapbox.io/files/65b8b9cbe262130024231379.jpg
Subtractノードの復習
「-」と検索して出てくる減算ノードは上のに数値から下の数値を引いた値を出力するノードです。なので上の状態だとPlayerHPのデフォルト値は100なので「100」-「0」=100となり、100が出力されてPlayerHPの変数にセットされる状態になっています。
では減算ノードの下のピンからRandomIntegerinRangeノードを作成して(そのまま検索すれば出てきます)、Minに10,Maxに30を入力します。
https://scrapbox.io/files/65b8ba27a748a600241d93f2.jpg
RandomIntegerinRangeノードとは?
このノードは最低値(Min)から最大値(Max)の間でランダムの整数値を出力するノードです。なので今回は最小値と最大値も含まれてランダムになるので、10~30の間でランダムな整数が出力されます。例えば10,12,19,27,30などがReturnValueから出力されます。
例えばこういったノード↓を作ってゲーム開始すると..
最後のSetPlayerHPノードからPrintStringを作成して、その後Appendノードを作成します。Aの入力値に「現在のプレイヤーのHPは」と記載して、BにはSetPlayerHPから接続します。自動で変換ノードが作成されます。
https://scrapbox.io/files/65b8bb1d87e29000252e9735.jpg
これでプレイして、Enterキーを入力してみましょう。10~30の間のランダムな数値でダメージを受けてプレイヤーのHPが減少していくようになりました。
https://scrapbox.io/files/65b8babe8783fe0023658d38.gif
🌟Step3:ゲームオーバーの処理をつくる
では今度はPlayerHPが0以下になった時点で「プレイヤーは力尽きた!ゲームオーバー!」とテキスト表示してみましょう。
現在Enterノードからは以下の様になっています。
https://scrapbox.io/files/65b8bb76c4e5df00234f1094.jpg
最後のPrintStringノードからブランチ(Branch)ノードを作成します。
ブランチノードのConditionのピンからドラッグして「<=」と検索して「以下(Less than)」ノードを作成します。
https://scrapbox.io/files/65b8bc4a255a190024342fb7.gif
一旦ここまで作成してしまいましょう↓PlayerHPをGetで上のピンに繋いでおきます。
https://scrapbox.io/files/65b8bc59ae7e640026c9efeb.gif
こんな感じになりました↓
https://scrapbox.io/files/65b8bc746dc1900026296bdb.jpg
以下(Less than)ノードとは?
「<=」と検索したら出てくる以下(Less than)ノードについて解説していきます。この以下ノードは下の入力値が上の入力値以下だった場合にTrueを出力して、そうではない場合にFalseを出力します。こういった二つの値を比較してTrueまたはFalseを出力する計算を比較演算子と言います。
ブランチのTrue側にPrintStringで「プレイヤーは力尽きた!ゲームオーバー!」と入力します。
https://scrapbox.io/files/65b8c501dff3b50023b00a76.jpg
最後に3秒後に自動的にゲームが終了する処理を追加して完了です。
https://scrapbox.io/files/65b8c77d966baa0024099471.jpg
🌟実践演習①
シンプルな数当てゲーム
目標:プレイヤーが特定のキー(0~9)を押すことで、0から9の間のランダムな目標数値を当てます。
ステップ
①ゲームを開始すると、0から9までのランダムな目標数値『Random Integer in Rangeによる』が生成され、CollectNumberというIntger型の変数に保存されます。
②プレイヤーが0から9までの数字キーを押すと、そのキーに対応する数値がInput NumberというInteger型の変数に記録されます。
③Branchを使用して入力した数値InputNumberと正しい数値CollectNumberが同じ数値かどうかを評価します。『==』
④推測が正しい場合は、Print Stringを使って「正解!」と表示され、ゲームクリアとなります。
⑤挑戦回数を制限するため、Zankiという変数を作成(Default 3)し、不正解の場合はZankiが-1され、「不正解。残りのチャレンジ回数:Zanki」とPrint Stringに表示します。
⑤もしもZankiが0以下になった場合は『ゲームオーバー』と表示され、3秒後にゲームが終了します。
《実践演習②》
Zankiの数が2のときに、CollectNumberが奇数か偶数かどうかのヒントを与えるログ表示を追加しましょう。
CollectNumberが奇数の時は『正解の数は奇数です』とログで表示されて、偶数の時は『正解の数は偶数です』と表示されるようにしましょう。
《実践演習③》
Zankiの数が1のときに、CollectNumberが5以上の時は、『正解の数は5以上です』と表示され、4以下の時は『正解の数は4以下です』と表示されるようにしましょう。
《実践演習④》
Zankiが0になったら、インプットを無効化する処理を追加しましょう。
CanInputというBool型の変数で制御します。
《実践演習⑤》
正解と不正解の時に専用の効果音を鳴らせるようにしていきましょう。
効果音を鳴らすには、PlaySound2Dを使用します。
ネタバレ注意
https://blueprintue.com/blueprint/z8kopl_j/