# パラメータの参照

# 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を選択可能。
Parameter | 参照するパラメータ ContainerのタイプをDataSlotにした場合は文字列での名前指定。

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

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

## ParameterReference関連クラス

- IntParameterReference
- FloatParameterReference
- BoolParameterReference
- GameObjectParameterReference
- StringParameterReference
- Vector2ParameterReference
- Vector3ParameterReference
- QuaternionParameterReference
- RectParameterReference
- BoundsParameterReference
- ColorParameterReference
- TransformParameterReference
- RectTransformParameterReference
- RigidbodyParameterReference
- Rigidbody2DParameterReference
- ComponentParameterReference
- LongParameterReference
- AnyParameterReference
  (Variableパラメータの参照に使用します)

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

- FlexibleInt
- FlexibleFloat
- FlexibleBool
- FlexibleGameObject
- FlexibleString
- FlexibleEnumAny
- FlexibleVector2
- FlexibleVector3
- FlexibleQuaternion
- FlexibleRect
- FlexibleBounds
- FlexibleColor
- FlexibleTransform
- FlexibleRectTransform
- FlexibleRigidbody
- FlexibleRigidbody2D
- FlexibleComponent
- FlexibleLong
- FlexibleField
  (Variableパラメータの参照に使用します)

# 参照する型の制約

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

## スクリプト例

     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クラスに制約される。