こちらは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によるパラメータのカスタマイズ
演算ノード
演算ノードに使用するスクリプトも作成できます。
詳しくは、「演算ノードのカスタマイズ」を参照してください。