前回の振り返り問題
TestTrue という名前の文字列型変数を作り、そのデフォルト値を true とします。ゲームが開始するとイベント Begin Play につながったブランチノードの Condition (条件) ピンが TestTrue の値を読み取り、 true であれば Hello と表示するグラフを作りたいのですが、果たしてそれは可能でしょうか? (本文で紹介した画像 4 のグラフを参考にしてください。)
早速、どのようなことになるのか下の画像をご覧ください。
(画像 1)
「String は Boolean と互換性がありません。」というエラーメッセージが表示されてしまいました。つまり、String(文字列)型の変数をBoolean(ブール)型のピンにつなぐことはできない、ということです。このように、型が異なる場合にいつもUE4が自動的に型変換してくれるとは限りません。前回のようにPrint Stringや+のノードに接続する場合は、自動的に型変換してくれましたが、たとえ変数の値を文字列でtrueとしても、さすがに気をきかしてブール型に変換してくれることはないようですね。
変数に値を入れる
さて、変数の型についてその基礎は分かりました。ここから、変数をもっと活用できるようにするために、変数に値を入れる(代入する、割り当てる)方法を勉強していきたいと思います。実は、これまでも変数に値は入れてはいたのですが、それはデフォルト値の欄を使っていました。
(画像 2)
今回は、グラフの中で必要に応じて変数に値を入れて、表示してみます。つまり、デフォルトの値を必要に応じて変更するわけです。
そこで、非常に基本的なグラフを作ってみましょう。ゲーム開始時に変数に値を代入して、それを表示するだけの簡単なグラフです。まず、Number という名前の整数型変数を作りましょう。コンパイルすると自動的に入るデフォルト値(0)はそのままにしておきます。
(画像 3)
そして、できたばかりのNumberをドラッグすると、ゲットかセットか選択するように促されるので、セットを選択します。「セット」とは「この変数に値をセットする(入れる)」という意味です。
(画像 4)
するとセットノードが出現します。このノードによってNumberに値を入れることができます。
(画像 5)
具体的には次のように(たとえば)876と入れてみます。(好きな整数の数字を入れてください。)
(画像 6)
このセットノードを実行するためには、左側の実行ピンにきっかけとなるノードを接続する必要があります。そのためには、今回は(も)イベントBeginPlayを使います。それをつなぎましょう。
(画像 7)
最後に、この値を表示するために次のようにPrint Stringノードにつなぎます。
(画像 8)
実行すると、次のようになります。
(画像 9)
非常に簡単です。(むしろ、だんだん簡単になってきたように思われます。)
ついでに、変数に値をセットしないで、元から入っている値(デフォルト値)をゲットしてそのまま表示すると当然のことながら、0と表示されます。(Numberをドラッグした時にゲットかセットか選択するように促されるので、ゲットを選択しています。)
(画像 10)
(画像 11)
セットの応用例
セット自体は非常に簡単な機能です。変数に値をセットするだけですから。ただし、このセットを使ってさまざまなことができるようになるので、ブループリントを使ってできることは、これでものすごく広がりました。下の例では、変数Countに1ずつ追加されていきます。
(画像 12)
下の画像(グラフ自体は上の画像とまったく同じです)を使って、もっと詳しく見てみましょう。
(画像 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にその値が入ります。
(画像 14)
ところで、下の画像(グラフ自体は上のグラフと同一です)で赤枠④の変数Countには何が入ることになるでしょうか?
(画像 15)
この変数Countが接続されているPrint StringはForLoopのCompleted(完了)に接続しているので、ループが終わった後に実行されるものです。その時点(5回目のループ終了時点)で変数Countには5が入ることになっていましたね。一応色をオレンジにして表示されるようにしているので、画像14では一番上(一番最後に表示されたもの)はオレンジ色で5になっていますね。
ブループリントは平面的に広がりがあり、同じ変数をいくつでも置くことができますが、メモリ上にその変数が多数置かれるわけではありません。メモリ上に置かれているその変数は1つだけであり、そこに入っている値もその時点で1つだけだということを覚えておいてください。(なお、変数とメモリの関係は第13回 変数の型について調べてみようで取り上げられています)。
【振り返り問題】
下の画像では、まず変数TestValueのデフォルト値が表示されます。次にHelloが表示されます。では、最後にオレンジ色で表示される値は何でしょうか?
(画像 16)