パラメータの参照

ParameterReference

ParameterReference関連クラスをフィールドに宣言することで、パラメータを参照できるようになります。

スクリプト例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
 
using UnityEngine;
using Arbor;

public class TestParameterReference : MonoBehaviour
{
	public IntParameterReference intParameter;

	void Start ()
	{
		if (intParameter.parameter != null)
		{
			Debug.Log(intParameter.parameter.name + " : " + intParameter.parameter.intValue);
		}	
	}
}

このスクリプトをGameObjectに追加すると以下のようになります。

フィールド名 説明
Container 参照するParameterContainer
ボタンをクリックするとConstantかDataSlotを選択可能。
(ただし、Arborのノード用スクリプト以外でDataSlotは使用できません)
Parameter 参照するパラメータ
ContainerのタイプをDataSlotにした場合は文字列での名前指定。

取得したParameterについては、スクリプトリファレンスを参照してください。

スクリプトリファレンス : Parameter

ParameterReference関連クラス

FlexibleField

FlexibleField関連クラスを使用すると、固定値の指定やパラメータ参照もしくはデータフローからの入力を切り替えて参照できます。

スクリプト例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 
using UnityEngine;
using Arbor;

[AddComponentMenu("")]
public class TestFlexibleFieldBehaviour : StateBehaviour
{
	public FlexibleInt flexibleInt;

	public override void OnStateBegin()
	{
		Debug.Log("flexibleInt : " + flexibleInt.value);
	}
}

このスクリプトをArborFSMのステートに追加すると以下のようになります。

フィールド右端にあるボタンをクリックすると参照方法が変更できます。

「Parameter」に変更することで、ParameterReferenceと同じように参照できるようになります。

FlexibleField関連クラス

参照する型の制約

AnyParameterReferenceComponentParameterReferenceは属性を指定することで、参照する型を制約することができます。

スクリプト例

 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
37
38
39
40
41
42
 
using UnityEngine;
using Arbor;

[AddComponentMenu("")]
public class TestConstraintReferenceBehaviour : StateBehaviour
{
	[ClassExtends(typeof(AudioSource))]
	public ComponentParameterReference audioSource = new ComponentParameterReference();

	[ClassExtends(typeof(AudioSourceCurveType))]
	public AnyParameterReference audioSourceCurveType = new AnyParameterReference();

	public FlexibleAnimationCurve curve = new FlexibleAnimationCurve(AnimationCurve.Linear(0, 0, 1, 1));

	// Use this for enter state
	public override void OnStateBegin()
	{
		AudioSource source_ = null;
		Parameter audioSourceParameter = audioSource.parameter;
		if (audioSourceParameter != null)
		{
			source_ = audioSourceParameter.objectReferenceValue as AudioSource;
		}

		AudioSourceCurveType curveType_ = AudioSourceCurveType.CustomRolloff;
		Parameter curveTypeParameter = audioSourceCurveType.parameter;
		if (curveTypeParameter != null)
		{
			curveTypeParameter.GetVariable<AudioSourceCurveType>(ref curveType_);
		}

		AnimationCurve curve_ = curve.value;

		if (source_ == null)
		{
			return;
		}

		source_.SetCustomCurve(curveType_, curve_);
	}
}    

スクリプトを追加した例

ParameterContainer例

(AudioSourceCurveTypeはVariableを作成して登録しました)

使用できる属性

クラス 属性
AnyParameterReference ClassTypeConstraintAttributeから派生したクラス
SlotTypeAttribute
ComponentParameterReference ClassTypeConstraintAttributeから派生したクラス
SlotTypeAttribute
指定の他、Componentクラスに制約される。
FlexibleComponent ClassTypeConstraintAttributeから派生したクラス
SlotTypeAttribute
指定の他、Componentクラスに制約される。