データフロー

出力スロット

OutpotSlotIntなどの出力スロットを宣言することでデータ出力ができます。

スクリプト例

TestOutputSlotBehaviourスクリプトファイルを作成し、以下のコードを記述してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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スクリプトファイルを作成し、以下のコードを記述してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
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スクリプトファイルを作成し、以下のコードを記述してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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などでは型制約を属性で指定できます。

スクリプト例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
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 SlotTypeAttribute
InputSlotAny ClassTypeConstraintAttributeから派生したクラス
SlotTypeAttribute
InputSlotComponent ClassTypeConstraintAttributeから派生したクラス
SlotTypeAttribute
指定の他、Componentクラスに制約される。
InputSlotUnityObject ClassTypeConstraintAttributeから派生したクラス
SlotTypeAttribute
指定の他、UnityEngine.Objectクラスに制約される。
FlexibleComponent ClassTypeConstraintAttributeから派生したクラス
SlotTypeAttribute
指定の他、Componentクラスに制約される。

カスタマイズ

データスロットの作成

自作したクラスのデータスロットも作成できます。

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

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

Variable

パラメータも作成する場合は、Variable Generatorを使用すると楽に作成できます。

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

スクリプティング : Variable

演算ノード

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

詳しくは、「スクリプティング : 演算ノード」を参照してください。

スクリプティング : 演算ノード