Page 1 of 1

Arbor EditorでVariableListをInputSlotにドロップする方法

Posted: 2023/12/22 02:26
by LKT
Arbor Editor上のパラメータタブにある要素のリストを
まるごとノードにparameterとしてドロップしたいです。

Image

Unity上でVariableを作成時に、Class単体はInputSlotなども定義されますが
そのClassのリストはVariableListだけあって、InputSlotなどは定義されていません。
ClassのリストのInputSlotの定義の仕方をご教授いただきたいです。

Re: Arbor EditorでVariableListをInputSlotにドロップする方法

Posted: 2023/12/22 04:07
by caitsithware
VariableListの値をノードに受け渡すにはInputSlot<ILIst<要素の型>>を使用してください。

Unity2020以降の場合

Unity2020以降では、フィールドに直接ジェネリック型を使用できますので、InputSlot<T>をそのまま使用できます。

Code: Select all

class AccessFooDataVariableList : StateBehaviour
{
    [SerializeField]
    InputSlot<IList<FooData>> input = new InputSlot<IList<FooData>>();
    
    public override void OnStateBegin() 
    {
        IList<FooData> list = null;
        if (input.GetValue(ref list))
        {
            // listを使う
        }
    }
}
Unity2019以前の場合

Unity2019以前はフィールドに直接ジェネリック型を使用すると認識されないため、以下のように一度InputSlotを継承した型を用意してください。

Code: Select all

[System.Serializable]
public class InputSlotListFooData : InputSlot<IList<FooData>>
{
}

[AddComponentMenu("")]
public class AccessFooDataVariableList  : StateBehaviour
{
    [SerializeField]
    InputSlotListFooData input = new InputSlotListFooData();
    
    public override void OnStateBegin() 
    {
        IList<FooData> list = null;
        if (input.GetValue(ref list))
        {
            // listを使う
        }
    }
}
このようなStateBehaviorを作成すると以下のようにGet ParameterからInputに接続できます。
Unity_a50uvVWab1.png
Unity_a50uvVWab1.png (23.91 KiB) Viewed 1850 times


この辺りはVariable<T>にならってVariableスクリプト追加時に一緒に作成したほうが良かったかもしれません。
また、FlexibleFieldやParameterReferenceについてはユーザー定義スクリプト用途に使いやすい型がないのが問題ありそうですね。
どちらも合わせて対応できないか検討いたします。

Re: Arbor EditorでVariableListをInputSlotにドロップする方法

Posted: 2023/12/22 08:47
by LKT
迅速なご対応ありがとうございました。
上記の通りに実装してみて、思う通りに動作してくれました。
おかげで直面する課題をクリアできました。