コメント🐤
では前回に引き続き、変数への理解を深めるために変数でHPを実装してみましょう。作成するものはこちら↓で、HPを減らしていき0になったらGAMEOVERというテキストを表示させます。少し長めですが、一つ一つ解説していきます。
変数は様々な種類(型)がある
変数には「型」と呼ばれる様々な種類があります。前回は文字列のデータとなる「String」という型を使用しました。
今回は整数の型となるIntegerという種類の変数を使用してみたいと思います。
①変数でHPを作って表示してみよう
では、変数を使ってHPを実装してみましょう。実際のゲームでもこの変数を使ってHPや持っているコインの数などを実装するので、今回は変数の基本を学ぶためにHPを実装するノードを組んでみます。
-
プロジェクトはサードパーソンを使用します。ThirdPerson > Blueprints > BP_ThirdPersonCharacterを開きます。
-
イベントグラフを開きます。キャラクターのHP(体力)という事なので、処理はキャラクターのイベントグラフに記載していきます。キャラクターを操作するノードが既にありますが、そのまま放置しておきましょう。
-
変数を作成します。変数の隣のプラスボタンを押します。
-
作成した変数の名前をHPにして、Booleanと書かれた場所をクリックして変数の種類(型)をIntegerにします。
Integerは整数のデータを入れる事ができる変数です。 -
変数を作成できたのでコンパイルして、HPの変数を選択した状態でデフォルト値を100にします。
-
まずはHPという100というデータが入った変数を表示してみましょう。BeginPlayからPrintSringノードを繋ぎます。
-
HPをドラッグで追加してGetHPを選択し、追加します。
-
HPのピンからPrintStringに接続します。すると変換ノードが作成されました。
変換ノードとは?
変数は異なる種類の型に接続する場合、変換する必要があります。つまり今回の場合、HPというIntegerという整数の型からStringという文字列の型へ変換する必要があります。
ブループリントでは異なる型でも接続すると同時に自動で変換ノードを作成してくれるため、簡単に型の変換,つまり変数が異なる種類でも扱えるようにしてくれます。変換ノードは異なる型どうしを接続する時に自動で作成されると覚えておきましょう。またIntegerは緑色でStringはピンク色と変数の型によって色が異なって表示されています。
- プレイしてみるとゲーム開始時に100と表示されました。
ノード解説
HPという100のデータが入っているデータを変換ノードにより、表示できる文字列にしてそれをゲーム開始時にテキスト表示したという形になります。
コメント🐤
では、そもそもなぜIntegerという型を使用するのでしょうか?Integerという型(整数のデータ)やFloatと呼ばれる型(小数のデータ)は計算が可能で中身の数字を変更する事ができるからです。例えばゲームのスコアは変動するのでそこでIntegerという型の変数を使用して、0のスコアから100,200と増やしたり調整する事ができます。実際にHPの変数を変更してみましょう。
②HPを減らす(ダメージを与える)
- 作成したノードの下の方で右クリック > 「f キー」と検索してFノードを作成します。(英語エディタの場合はF keyと検索してください)
キー入力ノードについて
キーボードの入力によって処理が発動するノードです。例えばFキーの場合はFキーを押すとそのタイミングでキー入力ノードに接続されたノードが実行されます。Pressdと書かれたピンはキーを押した瞬間、Releasedと書かれたピンはキーを離した瞬間にそこに接続しているノードの処理が行われるようになっています。
-
FキーからPrintStrngを作成し、中身を「敵が攻撃してきた!ダメージを受けた!」と入力します。
-
PrintStringから伸ばし、「set hp」と検索してSet HPを選択します。HPの中身の整数データを変更するためのノードです。
変数のGet(取得)とSet(セット)はドラッグでも検索でも追加できる
どちらからでも構いませんが変数が多くなった場合、右クリックの検索から行うと楽ですね。
- では、HPを100からダメージ分(10)減らしたいと思います。セットノードのHPのピンから伸ばして「subtarct」と検索してSubtract(減算する)ノードを作成します。
Subtract(減算する)ノードとは?
Subtractノードとは要するに引き算を行うためのノードです。上の入力値から下の入力値を引いた数を出力します。例えば以下の場合100から10を引いた90をテキスト表示するというノードになります。
ダメージを受けた時や、お金を支払って持ち金が減った時に使用します。
- HPの変数をドラッグで追加してGetHPを選択し、Subtractノードの上のピンに接続します。
- Subtractノードの下のピンに10と入力します。これでHPの整数データから10が引かれた値がHPにセットされます。
- どうなるか確認しましょう。セットノードからPrintStringノードを接続します。ピンもセットノードからPrintStringのInStringに接続しましょう。
ここまで作成したノード全体図
こんな感じになりました↓
確認&コピペはこちらからでもできます↓
- コンパイルしてコンパイル結果から成功するかどうか確認しておきましょう。もしエラーと表示された場合は必ずどこかで間違えているので再度ノードが間違っていないかを確認しましょう。
コメント🐤
なおコンパイルは手動で行う事は基本的に必須ではありませんが、ちゃんと正しく機能するかすぐ確認する事ができます。ノードが長くなったらコンパイルは手動でクリックする事をおすすめします。(毎回コンパイルをクリックしておくと確実です。ただ手間ですが..)
- プレイしてみます。Fキーを押すと徐々にHPが減るようになりました。
ノード解説
まずHPからSubract(減算する)ノードによって、10引かれます。その値がHPにセットされます。つまり最初にFキーを押した時に90の値がHPにセットされ、その90という値がPrintStingノードによってテキスト表示されたという事になります。
コメント🐤
では、ここまでかなり長くなってしまいましたが最後にもう一つ機能を付けたしたいと思います。
③HPが0になったらGAMEOVERと表示する
HPが0になったら「プレイヤーは倒れた!GAMEOVER」と表示したいと思います。
- PrintStringノードからbranchと検索してブランチノードを作成します。
ブランチノードとは?
ブランチノードとは、条件によってtrueに接続されたノードを実行するか、falseに接続されたノードを実行するか分岐させるノードです。変数の型の種類にはBooleanという「true」または「false」というどちらか二つのデータしか持たないものがあります。そのBooleanの変数をConditionのピンに接続する事によってtrueの場合とfalseの場合と処理を分岐させる事ができます。実際に使ってみましょう。
- ブランチノードのConditionのピンから伸ばし「<」または「LessEqual」と検索して、LessEqual(以下)ノードを作成します。
LessEqual(以下)ノードとは?
LessEqualノードは「>=」の不等式が成立している時にtrueを出力して、成立していない場合にfalseを出力します。つまり以下の画像の場合HPが100だとして下の入力値が0だった場合、式は「100 <= 0」となりfalseが出力されます。HPが-100だった場合は式は「-100 <= 0」となりtrueが出力されます。後からも解説します。
-
変数からHPをドラッグして、GetHPでHP取得ノードを作成します。LessEqualノードの上のピンに接続します。下のピンの入力値は0にした時にゲームオーバーと表示させたいのでそのままで良いです。
-
ブランチノードのtrueからPrintStringを作成して、「プレイヤーは倒れた!GAMEOVER」と入力します。
-
プレイしてみましょう。HPが0になったら「プレイヤーは倒れた!GAMEOVER」と表示されるようになりました。
ノード解説
LessEqual(以下)ノードによって「HPの整数データ <= 0」が成立する場合trueを出力します。つまりtrueが出力されるのではHPが0以下になった場合のみです。ブランチによってtrueのノードが実行されてテキストが表示されるという仕組みになっています。falseには何も接続されていないので、falseの場合(HP<=0が成立しない場合)は何も起きません。
完成!ノード全ての全体図
これで全てのノードが完成しました、
確認&コピペはこちらからどうぞ↓
完成動画↓
コメント🐤
変数には色々種類があり、種類の事を型と呼びます。Integerという型では整数のデータの事で、HPなど変更されるデータに用いられます。今回Fキーでダメージを受けるというノードを組みましたが、実際には敵の攻撃を受けたら、プレイヤーが高所から落下した時などにダメージを食らうという処理を行います。一つ一つ学んでいって様々なノードや変数を組み合わせてゲームの機能を作成する事に慣れていきましょう。次回、変数の様々な種類「型」についてざっくり解説していきたいと思います。