他のプログラミング言語と同様に Visual Scripting でもリテラル(定数)と変数を扱えます。
ここではそれらについて説明します。
まず準備です。
Hello World で作ったスクリプトは残しておくことにして、テスト用に別のスクリプトを用意します
Scripts フォルダの中に入り、空いている部分を右クリックしてメニューを表示し、Create → Visual Scripting → Script Graph を選ぶ
Scripts フォルダ内に「New Script Graph」というアセットが出来るので「Hensu Script」に名前を変更する
ヒエラルキーの PROGRAM をクリックしてインスペクタを表示する
Script Machine の Graph の Hello Script と書いてあるセルに Hensu Script をドロップする
「リテラル(Literal)」は直接スクリプト内に記入した値の事で「定数」とも呼ばれます。
Visual Scripting ではリテラルもユニットで表現されます。
例えばHello World のページで使った String Literal ユニットは文字列を表す(出力する)ユニットです(図1)。
さてリテラルの型には色々ありますが Visual Scripting で良く使われるのは以下の表1の型です。
なお「ユニット名」の列はユニット選択ダイアログに表示される名前で、最初の何文字かで検索をかければすぐ見つかります。
型 | 扱うデータの種類 | ユニット名 |
Float | 小数 | Float Literal |
Integer | 整数 | Integer Literal |
String | 文字列 | String Literal |
Boolean | 正(True)か偽(False) | Boolean Literal |
Vector3 | 3次元ベクトル | Vector3 Literal |
Game Object | ゲームオブジェクト | Game Object Literal |
使い方についてはテキストに出てきた時にその都度説明します。
「変数(Variables)」は値を一時的または恒久的に記録するためのメモリ領域です。
初心者向けのテキストでは良く「値を入れる箱」という感じで説明されています。
さて Visual Scripting では変数もユニットで表現されますが、面倒なことに変数の種類が沢山あって定義場所がそれぞれ異なっています。
表2に変数の種類一覧を示します。
種類 | 定義場所 |
Flow 変数 | フロー |
Graph 変数 | Script Graph |
Object 変数 | ゲームオブジェクト |
Schene 変数 | シーン |
App 変数 | アプリ |
Saved 変数 | アプリ終了後も消えない変数 |
ここではこの内、Flow 変数、Graph 変数、 Object 変数の使い方について説明します。
なお変数で扱える型はリテラルとほぼ同じ(表1)なので説明は省略します。
Flow 変数はフロー(プログラムの起点から最後のユニットまで順次処理を行う流れ)内で定義されていて、処理を完了したら消える使い捨て変数です。
※ 一般的なプログラミング言語でいうローカル変数に相当します
Flow 変数を定義するにはフローの中で「セット(Set)ユニット」を呼び出す必要があります。
また Flow 変数を参照するためには「ゲット(Get)ユニット」を呼び出す必要があります。
では演習として Integer (整数)型の Flow 変数をセットユニットを使って定義してみましょう。
変数名は flowtest とします。
Hensu Script を開く
グラフウィンドウの適当なところで右クリック
ユニット選択ダイアログが表示されたら検索窓に「set flow variable」と入力する
検索結果の中から Set Flow Variable を選択する
※ これ以降はユニットの検索方法については説明を省略します
Set Flow Variable ユニットが表示されたら中央のテキストボックスに変数名の flowtest を記入する
左下の値入力ポートからドラッグして適当な場所で指を離す
Integer Literal ユニットを追加・接続し、適当な値(例えば123)を入れる
これで Flow 変数の flowtest が出来たので、次はGet Flow Variable ユニットを使ってその値を参照してみます。
今回は Debug Log ユニットで値を表示してみましょう。
Debug Log ユニットを作成する
Debug Log ユニットの値入力ポートからドラッグして適当な場所で指を離す
Get Flow Variable ユニットを追加・接続し、中央のテキストボックスの右にある▼を押して flowtest を選択する
後は Start イベントユニットを作成し、Start → Set Flow Variable → Debug Log の順に繋ぎスクリプトの完成です(図2)。
では実行して flowtest にセットした値がコンソールに表示されるか試して下さい。
Graph 変数は一つのスクリプト内で共通して使える変数です。
※ 一般的なプログラミング言語でいうクラスフィールドに相当します
今のところ Start イベントしか使ってないのでピンと来ないと思いますが、イベントは複数あって、それらのイベント間で共通して使える変数になります。
さて Graph 変数は Flow 変数の時と違って Script Graph ウィンドウのブラックボードで作成します。
例えば今回は Float (小数)型の Graph 変数を作ってみましょう。初期値は 0.1、変数名は graphtest とします。
ブラックボードの Graph タブを選択する
(New Variable Name) と書いてあるテキストボックスに graphtest と入力する
その隣の+ボタンを押す
Type(型) を Float にする
Value(初期値) に 0.1 を入力する
するとブラックボードの表示は図3の様になります。
ここまで来たら後は Flow 変数のように使えます。
ただしセットユニットは「Set Graph Variable」、ゲットユニットは「Get Graph Variable」となります。
では試しに図 3 で作ったスクリプトを削除し、図 4 の様なスクリプトを作成して実行して下さい。
実行すると初期値の 0.1 が表示された後に上書きされた 123 が表示されます。
ところで図4で Set Graph Variable ユニットの値出力ポートと Debug Log ユニットの値入力ポートが線で繋がってますね。
この様に、わざわざ Get Graph Variable ユニットを用意しなくてもセットユニットから値を取得することも可能です。
Object 変数はゲームオブジェクト内で共通して使える変数です。
今のところ PROGRAM には Script Machine は一つしかアタッチされてないのでピンと来ないと思いますが、実は Script Machine は複数アタッチ出来て、それらの Script Machine 間で共通して使える変数になります。
さらに言うと他のゲームオブジェクトにアタッチされた Script Machine からも参照可能です。
さて Object 変数は Graph 変数と同様にブラックボードでも作成できますが、今回は PROGRAM のインスペクタ上で作ってみます。
試しに Vector3 (3次元ベクトル)型の Object 変数を作ってみましょう。初期値は (1,2,3)、変数名は objecttest とします。
PROGRAM のインスペクタを表示する
Variables の (New Variable Name) と書いてあるテキストボックスに objecttest と入力する
その隣の+ボタンを押す
Type(型) を Vector3 にする
Value(初期値) に (1,2,3) を入力する ※ 3次元ベクトルなので x,y,z の3成分に値をセットする
するとインスペクタの表示は図5の様になります。
では Hensu Script を開いてブラックボードを見て下さい。
ブラックボードの Object タブを開くと objecttest が追加されていると思います。
もしブラックボードの Object タブがグレー色になっていて選択できない場合はヒエラルキーの PROGRAM をクリックして下さい。
ここまで来たら後は Flow 変数や Graph 変数のように使えます。
ただしセットユニットは「Set Object Variable」、ゲットユニットは「Get Object Variable」となります。
では試しに図 4 で作ったスクリプトを削除し、図 5 の様なスクリプトを作成して実行して下さい。
実行すると初期値の (1,2,3) が表示された後に上書きされた (3,2,1) が表示されます。
一度変数を定義すれば検索窓で変数名で検索をかけるだけでその変数に対するセットユニット・ゲットユニットが検索可能です。
なお後に種類が表示されますので、同じ名前の変数が違う種類の変数として定義されていても判別可能です。
例えば hoge という名前の変数が Flow、Graph、Object 変数として定義されている時に hoge で検索した結果が図7です。