Page 1 of 1

Enum型の出力スロットを作成する方法

Posted: 2020/04/05 04:14
by matchy
Enum型の出力スロットを作成するには、どの出力スロットクラスを使用すればよろしいでしょうか?

Re: Enum型の出力スロットを作成する方法

Posted: 2020/04/05 07:11
by caitsithware
enum型のスロットですね。
enum型と言っても型の種類が多数あるため、特定のenum型専用の出力スロットは用意しておりません。

スクリプトから任意のenum型スロットを使用するには以下の2つの方法があります。

1. スロットの自作

OutputSlot<T>やInputSlot<T>を継承して、任意の型のスロットを作成する方法です。

参考コードは以下の通りです(最低限の記述であるため、あくまで参考程度に)

Code: Select all

using Arbor;

public enum MyEnum
{
    A,
    B,
}

[System.Serializable]
public class OutputSlotMyEnum : OutputSlot<MyEnum> {}

[System.Serializable]
public class InputSlotMyEnum : InputSlot<MyEnum> {}
フィールドの宣言側は、作成したOutputSlotMyEnumなどを使用して下さい。
※注:Unityの仕様により、フィールドに直接「public OutputSlot<MyEnum> output;」といった宣言はできません。

参考リンク

OutputSlot<T>
InputSlot<T>


2. 汎用スロットを使用

型に制限がないOutputSlotAnyやInputSlotAnyを使用する方法です。
また、型を制限するSlotTypeAttribute属性などで、任意の型のみに制限もできます。

参考コードは以下の通りです(最低限の記述であるため、あくまで参考程度に)

Code: Select all

using Arbor;

public class MyBehaviour : StateBehaviour {
    [SlotType(typeof(MyEnum))]
    public OutputSlotAny output;
    
    [SlotType(typeof(MyEnum))]
    public InputSlotAny input;
    
    // 以下略
}
OutputSlotAny,InputSlotAnyはobject型での受け渡しとなるため、間違った型を渡してしまうと実行時の不具合の原因となります。
その点注意して利用してください。

参考リンク

OutputSlotAny
InputSlotAny
SlotTypeAttribute

Re: Enum型の出力スロットを作成する方法

Posted: 2020/04/07 14:38
by matchy
ご回答いただいた方法でEnum型の出力スロットを作成することができました。
ご対応、ありがとうございました。

Re: Enum型の出力スロットを作成する方法

Posted: 2020/04/07 23:45
by caitsithware
作成できたとのことで良かったです。

もしよろしければ、評価やレビューもお願いいたします。
Arbor 3: FSM & BT Graph Editor