Variable ノード
Note
バージョン 2019/2020 LTS を使用している場合は Unity Asset Store から Visual Scripting パッケージをダウンロードしてください。
Variable (変数) ノードには 6 つの種類があります。これらの Variable ノード各種は、それぞれ以下の 3 つのオブジェクトノードを持っています。
- Get: 変数の値を取得します。
- Set: 変数に新しい値を割り当てます。
- Is Defined: 変数が定義されているかどうかを確認します。
これらはファジーファインダー内で Variables カテゴリの配下にあります。
Variable ノードは青緑色で表示されます。
動的型付け
Get / Set ノードの場合、変数は静的に型付けされません。つまり、型がランタイムで変更される可能性があります。これらのノードのタイプは Blackboard ウィンドウから定義された場合にオブジェクトとして表示されます。
Get Variable
Get Variable ノードは、入力として変数名を必要とし、出力として Value を返します。
Set Variable
Set Variable ノードは、入力として変数名とそれに割り当てられた新しい値を必要とします。レイアウトの便宜上、同じ値を出力として返します。
制御入力ポートを接続して変数を割り当てるタイミングを指定してください。また必要に応じて、制御出力ポートを接続してその後に実行すべき事を指定します。
まだ存在しない変数名を Set ノードに使用すると、その変数が作成されます。
Has Variable
Has Variable ノードは、入力として変数名を必要とし、出力として Is Defined ブール値を返します。このノードは変数が作成されているかどうかを確認したい場合に役立ち、作成されていない場合にフォールバック値を頻繁に提供します。
同じことをより簡単に行うには、Get Variable ノードの Graph Inspector 内で Fallback のチェックボックスをオンにしてください。これにより、変数がまだ定義されていない場合に返される Fallback 入力がノードに追加されます。
Dynamic Variable
変数の名前が標準の値入力ポートなので、文字列を返す他の任意のポートに接続してください。"dynamic variables (動的変数)" (つまり再生モード中に参照が変わる可能性のある変数) を参照してください。
Object Variable
Object Variable ノードは、Source (ソース) のための追加的な入力を必要とします。そのポートは、参照されている変数の定義されているゲームオブジェクトを示します。デフォルト値のままにすると現在のオブジェクト (self) を参照します。
例えば、この Get Variable ノードは player2 オブジェクトの health 変数の値を取得します。
ドロップダウンメニュー
種類と名前のドロップダウンメニューを使用して、Variable ノードの設定を素早く行えます。名前の候補はコンテキストによって (その種類の既存の変数や現在のグラフ内の他の変数ノードに応じて) 変わります。
ドラッグアンドドロップ
Blackboard ウィンドウからグラフ内にアイテムを直接ドラッグアンドドロップして、一致するノードを作成できます。
- デフォルトでは、Get ノードが作成されます。
- Alt キーを押しながら行うと Set ノードが作成されます。
- Shift キーを押しながら行うと、Is Defined ノードが作成されます。
Variables API
Visual Scripting は、変数を扱える簡単な API を提供しており、これを使用して変数の取得や設定が行えるほか、それが定義されているかどうかを確認できます。これら全ての操作は Variables クラスから使用可能です。
例
Variables.Application.Set("score", 100);
Using
以下の using を C# スクリプトに追加して API にアクセスします。
using Unity.VisualScripting;
スコープ
Graph
グラフ上の変数にアクセスするには、graph reference (グラフ参照) を作成します。これは基本的に、ネストされたグラフへの (そのルートマシンからの) パスです。
マシン上のルートグラフを取得するには、以下の通り。
var graphReference = GraphReference.New(flowMachine, true);
ネストされたグラフにアクセスするには、その親ノードを追加パラメーターとして渡します。
var graphReference = GraphReference.New(flowMachine, new IGraphParentElement[] { superUnit }, true);
graph reference (グラフ参照) を渡すには:
Variables.Graph(graphReference)
Object
オブジェクト上の変数にアクセスするには:
Variables.Object(gameObject)
Scene
Scene 変数にアクセスするには、以下のいずれかを行ってください。
Variables.Scene(scene)
または
Variables.Scene(gameObjectInScene)
または
Variables.ActiveScene
Application
Application 変数にアクセスするには:
Variables.Application
Saved
Saved 変数にアクセスするには:
Variables.Saved
操作
以下の例中にある小文字の scope は、上述のいずれかのスコープを示しています。
Get
変数の値を取得するには、Get メソッドを名前パラメーターとともに使用します。
scope.Get("name");
変数は厳密に型指定されておらず、(例えば以下のように) 手動でキャストする必要があることに注意してください。
int health = (int)Variables.Object(player).Get("health")
Set
変数の値を設定するには、Set メソッドを名前および値パラメーターとともに使用します。
scope.Set("name", value);
例
Variables.Object(player).Set("health", 100);
変数は厳密に型指定されていないため、変数の現在のタイプ (型) が異なっていても、どんな値でも 2 つ目のパラメーターに渡せます。
Note
Set メソッドをまだ存在しない変数名とともに使用すると、新しい変数が定義されます。
Is Defined
変数が定義されているかを確認するには、IsDefined メソッドを名前パラメーターとともに使用します。
scope.IsDefined("name");
例
if (Variables.Application.IsDefined("score"))
{
// ...
}