こちらはArbor 3.2.4以前のドキュメントです。
最新ドキュメントはArbor Documentationをご覧ください。
Arborにはグラフのノード間でデータを受け渡すための機能が備わっています。
データの流れ
データの入出力スロットを接続するとデータフローを活用できます。
例
組み込みスクリプトを使用した例では以下のようなデータフローが簡単に組めるようになっています。

- InstantiateGameObjectでプレハブをインスタンス化。
- インスタンス化したGameObjectを出力。
- Rigidbody.GetでRigidbodyコンポーネントを取り出し。
- AddForceRigidbodyで受け取ったRigidbodyに力を加える。
また、例ではArborFSMを使用していますが、BehaviourTreeでも同様にデータの受け渡しができます。
参考リンク
- StateBehaviour : InstantiateGameObject
- StateBehaviour : AddForceRigidbody
- Calculator : Rigidbody.Get
データスロットの使い方
接続
- データスロットのフィールドをドラッグ。
- 同じ型の対となるスロットにドロップ。
切断
- 接続ラインを右クリック。
- 「切断」を選択
FlexibleField
FlexibleField関連クラスのフィールドでは、複数の参照方法を選択できますので柔軟に値が設定できます。
指定方法の選択
- フィールド横の
ボタンをクリック。 - タイプを選択。
タイプ

| 項目 | 内容 |
|---|---|
| Constant | 定数値。 |
| Parameter | パラメータを参照する。 パラメータについては マニュアル : ParameterContainer を参照してください。 |
| Random(数値型のみ) | 指定範囲の中からランダムに取得する。 |
| DataSlot | データの入力スロット。 |
リルートノード
リルートノードを使用すると、データフローのラインを整理しやすくなります。
リルートノードを作成して接続
- データスロットのフィールドをドラッグ。
- リルートノードを作成したいグラフ内の位置でドロップ
- メニューの”リルート”を選択
リルートノード挿入
- 接続ライン上のリルートノードを作成したい位置を右クリック。
- メニューの”リルート”を選択。
リルートノードの方向変更
- 方向を変更するリルートノードを選択
- 表示される方向アイコンをドラッグして方向を変更。
接続ラインについて
値表示
プレイ中に接続ラインをマウスオーバーすると、現在値が表示されます。
また、接続ラインの右クリックメニューから「データ値を常に表示」を選択すると、マウスオーバーしなくても表示されるようになります。
全ての接続ラインの値を表示したい場合は、ツールバーの「デバッグ」メニューから「すべてのデータ値を表示」を選択すると切り替わります。

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

| 項目 | 内容 |
|---|---|
| データ値を常に表示 | プレイ時にデータ値を常に表示します。 |
| リルート | リルートノードを挿入します。 |
| 切断 | 切断します。 |
演算ノードについて
演算ノードはデータの入出力を持った演算用ノードです。
数値計算を行ったりフィールドにアクセスして出力したりできます。
演算ノードの作成
- Arbor Editorの適当な位置を右クリック。
- 「演算ノード作成」をクリック。
作成したい演算ノードをリストから選択
組み込みCalculator
よく使用する演算ノードは初めから用意されています。
Arborリファレンス : Calculator リファレンス
スクリプティング

出力スロット
OutpotSlotIntなどの出力スロットを宣言することでデータ出力ができます。
スクリプト例
TestOutputSlotBehaviourスクリプトファイルを作成し、以下のコードを記述してください。
using UnityEngine;
using Arbor;
[AddComponentMenu("")]
public class TestOutputSlotBehaviour : StateBehaviour
{
public OutputSlotInt outputSlot;
public override void OnStateBegin()
{
outputSlot.SetValue(Random.Range(100, 200));
}
}
このスクリプトをArborFSMのステートに追加すると以下のようになります。

出力スロットクラス
- OutputSlotInt
- OutputSlotFloat
- OutputSlotBool
- OutputSlotGameObject
- OutputSlotString
- OutputSlotVector2
- OutputSlotVector3
- OutputSlotQuaternion
- OutputSlotRect
- OutputSlotBounds
- OutputSlotColor
- OutputSlotTransform
- OutputSlotRectTransform
- OutputSlotRigidbody
- OutputSlotRigidbody2D
- OutputSlotComponent
- OutputSlotLong
- OutputSlotCollider
- OutputSlotCollider2D
- OutputSlotCollision
- OutputSlotCollision2D
- OutputSlotRaycastHit
- OutputSlotRaycastHit2D
- OutputSlotUnityObject
- OutputSlotAny
入力スロット
InputSlotIntなどの入力スロットを宣言することでデータ出力ができます。
スクリプト例
TestInputSlotBehaviourスクリプトファイルを作成し、以下のコードを記述してください。
using UnityEngine;
using Arbor;
[AddComponentMenu("")]
public class TestInputSlotBehaviour : StateBehaviour
{
public InputSlotInt inputSlot;
public override void OnStateBegin()
{
int intValue = 0;
if (inputSlot.GetValue(ref intValue))
{
Debug.Log("inputSlot : " + intValue);
}
else
{
Debug.LogWarning("inputSlot : not connected.");
}
}
}
このスクリプトをArborFSMのステートに追加すると以下のようになります。

入力スロットクラス
- InputSlotInt
- InputSlotFloat
- InputSlotBool
- InputSlotGameObject
- InputSlotString
- InputSlotVector2
- InputSlotVector3
- InputSlotQuaternion
- InputSlotRect
- InputSlotBounds
- InputSlotColor
- InputSlotTransform
- InputSlotRectTransform
- InputSlotRigidbody
- InputSlotRigidbody2D
- InputSlotComponent
- InputSlotLong
- InputSlotCollider
- InputSlotCollider2D
- InputSlotCollision
- InputSlotCollision2D
- InputSlotRaycastHit
- InputSlotRaycastHit2D
- InputSlotUnityObject
- InputSlotAny
FlexibleField
入力スロットだけでなく、固定値やパラメータも扱いたい場合はFlexibleFieldが便利です。
スクリプト例
TestFlexibleFieldBehaviourスクリプトファイルを作成し、以下のコードを記述してください。
using UnityEngine;
using Arbor;
[AddComponentMenu("")]
public class TestFlexibleFieldBehaviour : StateBehaviour
{
public FlexibleInt flexibleInt;
public override void OnStateBegin()
{
Debug.Log("flexibleInt : " + flexibleInt.value);
}
}
このスクリプトをArborFSMのステートに追加し、参照タイプをCalculatorにすると以下のようになります。

FlexibleField関連クラス
- FlexibleInt
- FlexibleFloat
- FlexibleBool
- FlexibleGameObject
- FlexibleString
- FlexibleVector2
- FlexibleVector3
- FlexibleQuaternion
- FlexibleRect
- FlexibleBounds
- FlexibleColor
- FlexibleTransform
- FlexibleRectTransform
- FlexibleRigidbody
- FlexibleRigidbody2D
- FlexibleComponent
- FlexibleLong
- FlexibleField<T>
(継承して使用します)
スロットの型制約
InputSlotAnyやInputSlotComponentなどでは型制約を属性で指定できます。
スクリプト例
using UnityEngine;
using Arbor;
[AddComponentMenu("")]
public class TestConstraintSlotBehaviour : StateBehaviour
{
[ClassExtends(typeof(AudioSource))]
public InputSlotComponent audioSource = new InputSlotComponent();
[ClassExtends(typeof(AudioClip))]
public InputSlotUnityObject audioClip = new InputSlotUnityObject();
[ClassExtends(typeof(AudioSourceCurveType))]
public InputSlotAny audioSourceCurveType = new InputSlotAny();
public FlexibleAnimationCurve curve = new FlexibleAnimationCurve(AnimationCurve.Linear(0, 0, 1, 1));
public override void OnStateBegin() {
AudioSource source_ = audioSource.GetValue<AudioSource>();
AudioClip clip_ = audioClip.GetValue<AudioClip>();
AudioSourceCurveType curveType_ = AudioSourceCurveType.CustomRolloff;
audioSourceCurveType.GetValue<AudioSourceCurveType>(ref curveType_);
AnimationCurve curve_ = curve.value;
if (source_ == null || clip_ == null)
{
return;
}
source_.clip = clip_;
source_.SetCustomCurve(curveType_, curve_);
}
}
使用できる属性
| クラス | 属性 |
|---|---|
| OutputSlotAny | |
| InputSlotAny | |
| InputSlotComponent |
指定の他、Componentクラスに制約される。 |
| InputSlotUnityObject |
指定の他、UnityEngine.Objectクラスに制約される。 |
| FlexibleComponent |
指定の他、Componentクラスに制約される。 |
カスタマイズ
データスロットの作成
自作したクラスのデータスロットも作成できます。
詳しくは、「データスロットのカスタマイズ」を参照してください。
Variable
パラメータも作成する場合は、Variable Generatorを使用すると楽に作成できます。
詳しくは、「Variableによるパラメータのカスタマイズ」を参照してください。
マニュアル : Variableによるパラメータのカスタマイズ
演算ノード
演算ノードに使用するスクリプトも作成できます。
詳しくは、「演算ノードのカスタマイズ」を参照してください。

