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


ここでは、自作パラメータを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);
		}
	}
}

Privacy Preference Center

Your Privacy

This site uses cookies to display contents and advertisements tailored to users, provide social media functions, measure advertisement impressions and clicks. We also gather information on users' site usage status and provide them to social media, advertisement distribution and data analysis partners. Each partner may use this information in combination with other information that the user provided to each partner or other information gathered when the user used the service of each partner.

Analytics, Ads