# ParameterContainer

ParameterContainer is a component used to perform data sharing etc. between graphs.

Add ParameterContainer to GameObject and set various types of parameters.

# Add ParameterContainer

## Create GameObject

Click Hierarchy’s Create button, or “Create” in the right-clicked menu,
If you select “Arbor > ParameterContainer”, you can create a GameObject with ParameterContainer added.

## Add to GameObject

- Select the GameObject you want to apply.
- Select “Menu > Component > Arbor > ParameterContainer”.
- Or choose Inspector’s “Add Component button > Arbor > ParameterContainer”.

# Edit ParameterContainer

## Add Parameter

- Click the + button at the lower right of “Parameters”.
  Select the type you want to add.

## Edit Parameter

- Select name, value and edit.

## Delete Parameter

- Select the parameter and click the - button.

# Type of parameter

Type | Inspector | Description
--- | --- | ---
Int |  | Signed 32 bit integer
Float |  | Signed 32 bit floating point number
Bool |  | Boolean
GameObject |  | Reference to GameObject
String |  | String
Vector2 |  | 2 dimensional vector
Vector3 |  | 3 dimensional vector
Quaternion |  | Quaternion
Rect |  | 2D rectangle
Bounds |  | An axis aligned bounding box.
Color |  | Color
Transform |  | Reference to Transform component
RectTransform |  | Reference to RectTransform component
Rigidbody |  | Reference to Rigidbody component
Rigidbody2D |  | Reference to Rigidbody2D component
Component |  | Referece to Component (typable)
Long |  | Signed 64 bit integer
Variable |  | Parameter type that can be built by you

# Abount Variable

With Variable you can create your own parameters.

For details, see “Customizing parameters with Variable”.

Customizing parameters with Variable

# How to reference parameters

## ParameterReference

By declaring the ParameterReference association class in the field, you can refer to the parameter.

### Example script

     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);
    		}
    	}
    }

When you add this script to GameObject, it becomes as follows.

Field Name | Description
--- | ---
Container | Reference ParameterContainer
Parameter | Parameters to be referred to

For the getted Parameter, refer to the script reference.

Script Reference : Parameter

### ParameterReference related class

- IntParameterReference
- FloatParameterReference
- BoolParameterReference
- GameObjectParameterReference
- StringParameterReference
- Vector2ParameterReference
- Vector3ParameterReference
- QuaternionParameterReference
- RectParameterReference
- BoundsParameterReference
- ColorParameterReference
- TransformParameterReference
- RectTransformParameterReference
- RigidbodyParameterReference
- Rigidbody2DParameterReference
- ComponentParameterReference
- LongParameterReference
- AnyParameterReference
  (Used to refer to Variable parameter)

## FlexibleField

Using the FlexibleField association class, you can select and reference constant values, parameter reference, or data flow input.

### Example script

     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);
    	}
    }

When this script is added to the state of ArborFSM, it becomes as follows.

You can change the reference method by clicking the button at the right end of the field.

By selecting “Parameter”, you can refer to it like Parameter Reference.

### FlexibleField related class

- FlexibleInt
- FlexibleFloat
- FlexibleBool
- FlexibleGameObject
- FlexibleString
- FlexibleVector2
- FlexibleVector3
- FlexibleQuaternion
- FlexibleRect
- FlexibleBounds
- FlexibleColor
- FlexibleTransform
- FlexibleRectTransform
- FlexibleRigidbody
- FlexibleRigidbody2D
- FlexibleComponent
- FlexibleLong
- FlexibleField
  (Used to refer to Variable parameter)

## Type of constraints that reference

AnyParameterReference and ComponentParameterReference can constrain referencing types by specifying attributes.

### Example script

     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_);
    	}
    }

Example of adding a script

Example ParameterContainer

(AudioSourceCurveType created Variable and registered it)

### Available Attributes

Class | Attributes
--- | ---
AnyParameterReference | Class derived from ClassTypeConstraintAttribute SlotTypeAttribute
ComponentParameterReference | Class derived from ClassTypeConstraintAttribute SlotTypeAttribute It is also constrained to the Component class.
FlexibleComponent | Class derived from ClassTypeConstraintAttribute SlotTypeAttribute It is also constrained to the Component class.

# About GlobalParameterContainer

GlobalParameterContainer is a component to use when there are parameters that you want to keep even if you change the scene.

## Addition of GlobalParameterContainer

- Choose you want to apply GameObject Select “menu> Component> Arbor> GlobalParameterContainer”.
- Alternatively, select the “Add Component button> Arbor> GlobalParameterContainer” of Inspector.
- Also, you can create a GameObject with GlobalParameterContainer attached from Hierarchy’s Create button “Arbor> GlobalParameterContainer”.

## Setting GlobalParameterContainer

- ParameterContainer with parameters to be shared between scenes is created in advance and Prefabized.
- Select GameObject to which GlobalParameterContainer is added. Specify Prefab of ParameterContainer created in Prefab of Inspector.

## Reference parameters via GlobalParameterContainer

By specifying GlobalParameterContainer in the Container field of ParameterReference, parameters can be referred.

# Associated built-in script

We will introduce some of the built-in script.

## StateBehaviour

Class | Attribute
--- | ---
CalcParameter | Calculate and change the value of Parameter.
SetBoolParameterFromUIToggle | Set the value of Toggle to Parameter.
SetFloatParameterFromUISlider | Set the value of Slider to Parameter.
ParameterTransition | It determines the value of Parameter and makes a transition.

## Decorator

Class | Attribute
--- | ---
ParameterCheck | Check Parameter
ParameterConditionalLoop | Loop by Parameter condition.

In addition, there are many built-in scripts that get values using FlexibleField, so please refer to the reference.

Arbor Reference