第14回 変数に値を入れてみる

前回の振り返り問題

TestTrue という名前の文字列型変数を作り、そのデフォルト値を true とします。ゲームが開始するとイベント Begin Play につながったブランチノードの Condition (条件) ピンが TestTrue の値を読み取り、 true であれば Hello と表示するグラフを作りたいのですが、果たしてそれは可能でしょうか? (本文で紹介した画像 4 のグラフを参考にしてください。)

早速、どのようなことになるのか下の画像をご覧ください。
b14-1 (画像 1)
「String は Boolean と互換性がありません。」というエラーメッセージが表示されてしまいました。つまり、String(文字列)型の変数をBoolean(ブール)型のピンにつなぐことはできない、ということです。このように、型が異なる場合にいつもUE4が自動的に型変換してくれるとは限りません。前回のようにPrint Stringや+のノードに接続する場合は、自動的に型変換してくれましたが、たとえ変数の値を文字列でtrueとしても、さすがに気をきかしてブール型に変換してくれることはないようですね。

変数に値を入れる

さて、変数の型についてその基礎は分かりました。ここから、変数をもっと活用できるようにするために、変数に値を入れる(代入する、割り当てる)方法を勉強していきたいと思います。実は、これまでも変数に値は入れてはいたのですが、それはデフォルト値の欄を使っていました。
b14-2(画像 2)
今回は、グラフの中で必要に応じて変数に値を入れて、表示してみます。つまり、デフォルトの値を必要に応じて変更するわけです。

そこで、非常に基本的なグラフを作ってみましょう。ゲーム開始時に変数に値を代入して、それを表示するだけの簡単なグラフです。まず、Number という名前の整数型変数を作りましょう。コンパイルすると自動的に入るデフォルト値(0)はそのままにしておきます。
b14-3(画像 3)
そして、できたばかりのNumberをドラッグすると、ゲットセットか選択するように促されるので、セットを選択します。「セット」とは「この変数に値をセットする(入れる)」という意味です。
b14-4(画像 4)
するとセットノードが出現します。このノードによってNumberに値を入れることができます。
b14-5(画像 5)
具体的には次のように(たとえば)876と入れてみます。(好きな整数の数字を入れてください。)
b14-6(画像 6)
このセットノードを実行するためには、左側の実行ピンにきっかけとなるノードを接続する必要があります。そのためには、今回は(も)イベントBeginPlayを使います。それをつなぎましょう。
b14-7(画像 7)
最後に、この値を表示するために次のようにPrint Stringノードにつなぎます。
b14-8(画像 8)
実行すると、次のようになります。
b14-9(画像 9)
非常に簡単です。(むしろ、だんだん簡単になってきたように思われます。)

ついでに、変数に値をセットしないで、元から入っている値(デフォルト値)をゲットしてそのまま表示すると当然のことながら、0と表示されます。(Numberをドラッグした時にゲットセットか選択するように促されるので、ゲットを選択しています。)
b14-10(画像 10)
b14-11(画像 11)

セットの応用例

セット自体は非常に簡単な機能です。変数に値をセットするだけですから。ただし、このセットを使ってさまざまなことができるようになるので、ブループリントを使ってできることは、これでものすごく広がりました。下の例では、変数Countに1ずつ追加されていきます。
b14-12(画像 12)
下の画像(グラフ自体は上の画像とまったく同じです)を使って、もっと詳しく見てみましょう。
b14-13(画像 13)
まずForLoopではFirst Index 50~Last Index 54となっています。50,51,52,53,54とIndexが変化するので、5回のループが行われることになります。ただし、右のIndexピンは使われていないので、このIndexの値自体は使われていません。単にループを回すためにしか使われていません。ですから、First Index 101~Last Index 105としてもまったく同じ結果になります。適当な値を入れただけです。さて、赤枠①では、変数Countの値がゲット(取得)されています。ループ1回目におけるCountの値はデフォルト値0です(デフォルト値はこの時点でまだ変更されていないです)。そして、それが赤枠②の+ノードに接続されていて、1が加わっています。その結果の値1(0+1の結果の値)が赤枠③のCountのセットノードに接続されています。つまり、変数Countに1という値が入るのです。この時点で変数Countはもはやデフォルト値ではなくなりました。ですから2回目のループでは、赤枠①の変数Countの値は1です。赤枠②でそれに1が加わり、赤枠③で1+1=2が変数Countにセットされます。このようにして、3回目のループでは2+1=3、4回目のループでは3+1=4、5回目のループでは4+1=5 というように計算されて、変数Countにその値が入ります。
b14-14(画像 14)
ところで、下の画像(グラフ自体は上のグラフと同一です)で赤枠④の変数Countには何が入ることになるでしょうか?
b14-15(画像 15)
この変数Countが接続されているPrint StringはForLoopのCompleted(完了)に接続しているので、ループが終わった後に実行されるものです。その時点(5回目のループ終了時点)で変数Countには5が入ることになっていましたね。一応色をオレンジにして表示されるようにしているので、画像14では一番上(一番最後に表示されたもの)はオレンジ色で5になっていますね。

ブループリントは平面的に広がりがあり、同じ変数をいくつでも置くことができますが、メモリ上にその変数が多数置かれるわけではありません。メモリ上に置かれているその変数は1つだけであり、そこに入っている値もその時点で1つだけだということを覚えておいてください。(なお、変数とメモリの関係は第13回 変数の型について調べてみようで取り上げられています)。

【振り返り問題】
下の画像では、まず変数TestValueのデフォルト値が表示されます。次にHelloが表示されます。では、最後にオレンジ色で表示される値は何でしょうか?
b14-17(画像 16)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする