【Unity】なんでもReorderableList

Unity Editorではシリアライズされた配列のインターフェイスとしてReorderableListが使われている部分があります.
これが便利なので全部ReorderbleListで編集できるEditor拡張を書きました.

f:id:FriendSea:20190727184006p:plain

面倒なのでAttribute等も用意せず無条件で置き換えます.

ソースコード

これをEditorフォルダに入れれば動きます.
思ったよりシンプルになってくれました.

配列ぜんぶReorderableListにする

やってること

MonoBehaviourやScriptableObjectを含むUnity.ObjectのEditorを書き換えてます.

[CustomEditor(typeof(UnityEngine.Object), true)]

第2引数にtrueを渡すと派生クラスにも適用されるので全てのインスペクタ表示が変わる.

あとはシリアライズされているプロパティを1つずつ拾っていき,配列ならReorderbleListで, そうでなければデフォルトのPropertyFieldで描画しています.

ReorderbleListを利用した拡張の書き方についてはこちらのページが参考になります.

anchan828.github.io

ReorderableListは同じインスタンスを利用し続けないと要素の選択ができないので,
OnEnableのタイミングでインスタンスの生成とコールバックの登録を行っています.
あと,ReorderbleListに渡したSerializedPropertyにNextVisibleなどを呼ぶとバグります.
Copyしてから渡しましょう.

配列の入れ子

今回の拡張では一番外側の配列のみReorderableListになります.
内側はデフォルトのまま.

f:id:FriendSea:20190727190314p:plain

一応これは

[CustomPropertyDrawer(typeof(System.Object), true)]

なPropertyDrawerで同様の実装をすればReorderableListになってくれるはずです.[要検証]
今のところ必要になっていないので書いてません.