# データフロー

Arborにはグラフのノード間でデータを受け渡すための機能が備わっています。

# データの流れ

データの入出力スロットを接続するとデータフローを活用できます。

## 例

組み込みスクリプトを使用した例では以下のようなデータフローが簡単に組めるようになっています。

1. InstantiateGameObjectでプレハブをインスタンス化。
2. インスタンス化したGameObjectを出力。
3. Rigidbody.GetでRigidbodyコンポーネントを取り出し。
4. AddForceRigidbodyで受け取ったRigidbodyに力を加える。

また、例ではArborFSMを使用していますが、BehaviourTreeでも同様にデータの受け渡しができます。

## 参考リンク

- StateBehaviour : InstantiateGameObject
- StateBehaviour : AddForceRigidbody
- Calculator : Rigidbody.Get

# データスロットの使い方

## 接続

- データスロットのフィールドをドラッグ。
- 同じ型の対となるスロットにドロップ。

## 切断

- 接続ラインを右クリック。
- 「切断」を選択

# FlexibleField

FlexibleField関連クラスのフィールドでは、複数の参照方法を選択できますので柔軟に値が設定できます。

## 指定方法の選択

- フィールド横のボタンをクリック。
- タイプを選択。

## 参照タイプ

### FlexibleType

FlexibleVector3などで選択できるタイプ。

項目 | 内容
--- | ---
Constant | 定数値。 値を設定するフィールドが表示される。
Parameter | パラメータを参照する。 パラメータについては ParameterContainer を参照してください。
DataSlot | データの入力スロット。

### FlexiblePrimitiveType

FlexibleIntなどの数値型で選択できるタイプ。

項目 | 内容
--- | ---
Constant | 定数値。 値を設定するフィールドが表示される。
Parameter | パラメータを参照する。 パラメータについては ParameterContainer を参照してください。
Random | 指定範囲の中からランダムに取得する。
DataSlot | データの入力スロット。

### FlexibleSceneObjectType

FlexibleGameObjectなどのシーンオブジェクト型で選択できるタイプ。

項目 | 内容
--- | ---
Constant | 定数値。 値を設定するフィールドが表示される。
Parameter | パラメータを参照する。 パラメータについては ParameterContainer を参照してください。
DataSlot | データの入力スロット。
Hierarchy | グラフの階層から参照する。 Self 自グラフを所有しているGameObjectを参照。 RootGraph グラフの階層化をしている場合に、ルートグラフを所有しているGameObjectを参照。 自グラフがルートの場合は、自グラフのGameObjectを参照する。

## ドラッグ＆ドロップによる設定

選択しているタイプに関係なく、ParameterやDataSlot（シーンオブジェクト型の場合はGameObjectやComponentも可）を直接ドラッグ＆ドロップして設定できます。

- 設定したいパラメータなどをドラッグ。
- Dropフィールドへドロップ。

# DataLink属性

DataLink属性を使用したフィールドでは、定数かデータフローからの入力が使用できます。 また、データフローから入力する場合はどのタイミングで値を更新するか指定できます。

## タイミングの指定

- 入力スロットを他の出力スロットへ接続すると、タイミング指定フィールドが表示される。
- タイプを指定。
- (表示されない場合はスクリプトによりタイミングが指定されているため変更できません。)

## タイミングの種類

項目 | 内容
--- | ---
Noting | 更新しない。
Everything | 常に更新する。
Enter | ノードに入った時に更新する。
Execute | ノードが実行される時に更新する。
Manual | スクリプトから任意のタイミングに更新する。

# リルートノード

リルートノードを使用すると、データフローのラインを整理しやすくなります。

## リルートノードを作成して接続

- データスロットのフィールドをドラッグ。
- リルートノードを作成したいグラフ内の位置でドロップ
- メニューの”リルート”を選択

## リルートノード挿入

- 接続ライン上のリルートノードを作成したい位置を右クリック。
- メニューの”リルート”を選択。

## リルートノードの方向変更

- 方向を変更するリルートノードを選択
- 表示される方向アイコンをドラッグして方向を変更。

# 接続ラインについて

## 値表示

プレイ中に接続ラインをマウスオーバーすると、現在値が表示されます。

また、接続ラインの右クリックメニューから「データ値を常に表示」を選択すると、マウスオーバーしなくても表示されるようになります。

全ての接続ラインの値を表示したい場合は、ツールバーの「デバッグ」メニューから「すべてのデータ値を表示」を選択すると切り替わります。

## 右クリックメニュー

接続ライン上を右クリックすると、メニューが表示されます。

項目 | 内容
--- | ---
データ値を常に表示 | プレイ時にデータ値を常に表示します。
リルート | リルートノードを挿入します。
切断 | 切断します。

# 演算ノードについて

演算ノードはデータの入出力を持った演算用ノードです。

数値計算を行ったりフィールドにアクセスして出力したりできます。

## 演算ノードの作成

- Arbor Editorの適当な位置を右クリック。
- 「演算ノード作成」をクリック。
  作成したい演算ノードをリストから選択

## 組み込みCalculator

よく使用する演算ノードは初めから用意されています。

Arborリファレンス : Calculator リファレンス

# スクリプティング

自作したスクリプトからもデータフローを使用できます。

詳しくは、「スクリプティング : データフロー」を参照してください。

スクリプティング : データフロー