UnityでDictionaryもどきをインスペクタ表示したい

タイトルの通りですが、UnityではDictionaryクラスはシリアライズできないので、インスペクタからデータを設定することができません。

モンスター毎にItemのドロップ率を変更したいと思って、

Dictionary<アイテム,アイテムのドロップ確立>

のようなデータを使いたかったんですが、キーとバリューをインスペクターから変更できるようにしたかったんです。

結果からいうと形にはなったんですが、

のようにしてからクラスでデータ構造を作ってからエディタ拡張しても変わらないような気がします。

Dictionary<Tkey,Tvalue>で使えるように抽象的にしようとすると頭がごっちゃになって諦めてしまいました。


実践

公式から引用

上記のリファレンス通り、実行時にAwake内でDictionaryに入れて使うとして、インスペクタ―からの編集画面を少し変更しようと思います。


レイアウトは適当だけど以下のように。

要は、キーとバリューがセットで表示されるようにしたい。

スクリプトはこんな感じ


インスペクタで表示されるコンポーネント


エディタ拡張のスクリプト

考え方的には

みたいな感じでやってみました。


形にはなったからいいかなあ。

Dictionaryの型が変わる度に微調整が必要になって面倒。

エディタ拡張についてのスクリプトリファレンス