What
- 以下の要件を満たした Dictionary 的なフィールドを宣言したい!
- シリアライズ可能
- インスペクタで操作可能
- キーと値の型を定義可能
Why
- Unity の仕様上、
List<T>
は OK ですがDictionary<TKey, TValue>
は NG です。- シリアライザの仕組み上仕方ないらしいのですが、詳しいことは他の方の記事に譲りますw
- そこで、別の切り口から代替案を考えてみました。
How
Serializable
なstruct
のList
を作ります!
- そうすると、上記の画像のように、要件を満たした Dictionary もどきが実現できます!
Fuga List
の方が Dictionary もどきになります。
- ポイントは
struct
に[Serializable]
属性をつける所です。- これがないとシリアライズできませんし、インスペクタから操作もできません。
struct
内部のフィールドに属性をつけてあげれば通常のインスペクタ拡張と同じ機能が利用できます。- この例だと
[Range(1, 10)]
が該当します。
- この例だと
- 都度
struct
を宣言する必要があるので、ちょっとシンドイですが。 - 勿論、 ISerializationCallbackReceiver を実装するという素直な手もありますが、それはそれでインスペクタの拡張などが結構大変かなぁ…と。
- なお、
struct
をシリアライズ出来るようになった Unity は割と最近のバージョンなのでご注意ください。- 私は Unity 2017.1.0f3 で動作確認を行っております。