Variable

ここでは、自作パラメータをParameterContainerに登録する方法を説明します。

Variableスクリプトファイルの作成

Variable Generatorによるスクリプトの生成

自作パラメータ用スクリプトを作成します。

  • Projectウィンドウの右クリックメニューから「Create > Arbor > Variable C# Script」を選択。
  • Variale Generatorウィンドウの「Variable Name」フィールドにパラメータクラス名を入力 「Create」ボタンを押してスクリプト作成。
    • 使用できない名前の場合はエラーボックスが表示されるため、Variable Nameを修正してください。
    • OpenEditorチェックボックスがチェックされていると、「Create」ボタン押下後にスクリプトエディタが開きます。

作成例

「Variable Name」にEnemyInfoと入力し、「Create」ボタンを押して作成されたスクリプト例

 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
43
44
45
46
47
48
49
50
51
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Arbor;

[System.Serializable]
public class EnemyInfo
{
	// Declare Serialize Fields
}

[System.Serializable]
public class FlexibleEnemyInfo : FlexibleField<EnemyInfo>
{
    public FlexibleEnemyInfo(EnemyInfo value) : base(value)
    {
    }

    public FlexibleEnemyInfo(AnyParameterReference parameter) : base(parameter)
    {
    }

    public FlexibleEnemyInfo(InputSlotAny slot) : base(slot)
    {
    }

    public static explicit operator EnemyInfo(FlexibleEnemyInfo flexible)
    {
        return flexible.value;
    }

    public static explicit operator FlexibleEnemyInfo(EnemyInfo value)
    {
        return new FlexibleEnemyInfo(value);
    }
}

[System.Serializable]
public class InputSlotEnemyInfo : InputSlot<EnemyInfo>
{
}

[System.Serializable]
public class OutputSlotEnemyInfo : OutputSlot<EnemyInfo>
{
}

[AddComponentMenu("")]
public class EnemyInfoVariable : Variable<EnemyInfo>
{
}    

解説

  • EnemyInfo
    自作するパラメータのクラス。
    シリアライズ用フィールドを追加することで、ParameterContainerで自作パラメータを設定できるようになります。
  • FlexibleEnemyInfo
    Constant、Parameter、Calculatorを切り替えて参照できるようにするためのクラス。
  • InputSlotEnemyInfo
    EnemyInfoの入力スロット用クラス。
  • OutputSlotEnemyInfo
    EnemyInfoの出力スロット用クラス。
  • EnemyInfoVariable
    ParameterContainerへ登録するためのVariableクラス。
    クラス名とスクリプトファイル名が一致している必要があります。

フィールドの追加

生成したスクリプトにフィールドを追加します。

例として、EnemyInfoにいくつかフィールドを追加してみます。

1
2
3
4
5
6
7
8
[System.Serializable]
public class EnemyInfo
{
	// Declare Serialize Fields
	public string displayName;
	public Sprite icon;
}
    

ParameterContainerへの追加

作成したVariableをParameterContainerへ追加します。

  • あらかじめParameterContainerを作成しておいてください。
  • 「+」ボタンを押し、「Variable > 作成したVariable名」を選択。
  • パラメータが追加される

Variableパラメータへの参照

FlexibleField

生成したスクリプトファイルに定義されているFlexible+Variable NameのクラスをStateBehaviourなどに持たせることで参照できます。

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

[AddComponentMenu("")]
public class EnemyInfoBehaviour : StateBehaviour {

	public FlexibleEnemyInfo enemyInfo;

	// Use this for enter state
	public override void OnStateBegin()
	{
		EnemyInfo value = enemyInfo.value;
		Debug.Log(value.displayName);
	}
}    

AnyParameterReference

Parameterを直接参照する場合はAnyParameterReferenceを使用します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Arbor;

[AddComponentMenu("")]
public class EnemyInfoBehaviour2 : StateBehaviour {

	[ClassExtends(typeof(EnemyInfo))]
	public AnyParameterReference enemyInfo = new AnyParameterReference();

	// Use this for enter state
	public override void OnStateBegin()
	{
		Parameter enemyInfoParameter = enemyInfo.parameter;
		if (enemyInfoParameter != null)
		{
			EnemyInfo value = enemyInfoParameter.value as EnemyInfo;
			Debug.Log(value.displayName);
		}
	}
}