Variableによるパラメータのカスタマイズ


こちらはArbor 3.2.4以前のドキュメントです。

最新ドキュメントはArbor Documentationをご覧ください。

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

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

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

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

  • Projectウィンドウの右クリックメニューから「Create > Arbor > Variable C# Script」を選択。
  • Variale Generatorウィンドウの「Variable Name」フィールドにパラメータクラス名を入力
    「Create」ボタンを押してスクリプト作成。

    • 使用できない名前の場合はエラーボックスが表示されるため、Variable Nameを修正してください。
    • OpenEditorチェックボックスがチェックされていると、「Create」ボタン押下後にスクリプトエディタが開きます。

作成例

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

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にいくつかフィールドを追加してみます。

[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などに持たせることで参照できます。

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

AnyParameterReference

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

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