データフロー


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

データの流れ

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

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

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

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

参考リンク

データスロットの使い方

接続

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

切断

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

FlexibleField

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

指定方法の選択

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

タイプ

項目 内容
Constant 定数値。
Parameter パラメータを参照する。
パラメータについては マニュアル : ParameterContainer を参照してください。
Random(数値型のみ) 指定範囲の中からランダムに取得する。
DataSlot データの入力スロット。

リルートノード

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

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

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

リルートノード挿入

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

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

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

接続ラインについて

値表示

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

GIF

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

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

右クリックメニュー

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

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

演算ノードについて

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

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

演算ノードの作成

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

組み込み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のステートに追加すると以下のようになります。

出力スロットクラス

入力スロット

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のステートに追加すると以下のようになります。

入力スロットクラス

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関連クラス

スロットの型制約

InputSlotAnyInputSlotComponentなどでは型制約を属性で指定できます。

スクリプト例

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によるパラメータのカスタマイズ

演算ノード

演算ノードに使用するスクリプトも作成できます。

詳しくは、「演算ノードのカスタマイズ」を参照してください。

マニュアル : 演算ノードのカスタマイズ

Privacy Preference Center

Your Privacy

This site uses cookies to display contents and advertisements tailored to users, provide social media functions, measure advertisement impressions and clicks. We also gather information on users' site usage status and provide them to social media, advertisement distribution and data analysis partners. Each partner may use this information in combination with other information that the user provided to each partner or other information gathered when the user used the service of each partner.

Analytics, Ads