VRChatのUdonSharp(U#)の2次元配列のInspector表示について
U# 1系で2次元配列がInspector表示されない
従来はU#でクラス変数を記述するときにpublicで宣言する、もしくは[SerializeField]属性を付与すると、UdonBehaviourのInspectorでその変数の値を設定できるようになるが、U#の1系(バージョン1.0以降)で2次元配列の変数がInspectorに表示されなくなっている。
以下、サンプルコードとInspectorの見え方。
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
public class ArrayTest : UdonSharpBehaviour
{
public int a;
public int[] b;
public int[][] c;
public int d;
void Start()
{
}
}
確認したわけではないが、おそらく3次以上の配列でも同様と思われる。
U# 1系で2次元配列を表示させるには?
不具合かと思ってvrchat-community/UdonSharpにIssueを立てたところ、開発者のMerlinさんから速攻で回答が…!(ありがとうございます!!)
Unityのシリアライザがジャグ配列を扱えないため、[SerializeField]ではシリアライズ化されないためとのこと。
で、変わりに[OdinSerialize]を使うようにとのこと。
以下、修正版のコード
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
using VRC.Udon.Serialization.OdinSerializer;
public class ArrayTest : UdonSharpBehaviour
{
public int a;
public int[] b;
[OdinSerialize] private int[][] c_private; // こっちは表示されない。
[OdinSerialize] public int[][] c_public; // こっちは表示される。publicが必須の模様。
public int d;
void Start()
{
}
}
OdinSerializeを使用するために、VRC.Udon.Serialization.OdinSerializerをusingする。
また、[OdinSerialize]は[SerializeField]と違い、Inspectorに表示するにはpublicで宣言することが必須な模様。
こちらのコードをU#の0系、1系にアタッチした結果がこちら。
[OdinSerialize]を使用することで、U# 1系で二次配列をInspectorに表示させることができましたが、以下の点には注意点する必要がありそうです。
変数はpublicで宣言する必要があるので、アクセス権に注意
表示位置が最下層になってします
また、0系、1系どちらでも使用可能なため、互換を考えると、Inspectorに表示させたい2次元配列は[OdinSerialize]で記述するのが良いでしょう。
この記事が気に入ったらサポートをしてみませんか?