(15)2015.09.02ReorderableListとPropertyDrawerを組み合わせて使うchobi_eUnityたびたびですがちょびえです。今日はReorderableListとPropertyDrawerの組み合わせで悩んでしまったのでまた書いときます。UnityEditorで並び替えできるリストが欲しいとなると、あまり説明がされていないReorderableListをつかうのがとても良い感じです。海外でも日本でもReorderableListとPropertyDrawerの組み合わせって分かりやすい解説がなくこんがらがりがちです。御多分にもれずハマってしまったので忘れないように書いときます。PropertyDrawerPropertyDrawerはSystem.SerializableのAttributeを付けたPrimitiveやクラスなどをいい感じに表示してくれる機能です。カスタムInspectorはComponentと対、カスタムPropertyDrawerはプロパティやフィールドと対になっています。PersonDataというクラスがあるとして、PropertyDrawerをカスタムしたい場合は下記のようにします。data;}この状態でGameObjectにアタッチすると、このような表示になります。この場合そのままでも十分見やすい状態なのですが、PropertyDrawerを使ってdataフィールドの表示を変更してみたいと思います。下記スクリプトをEditor/PersonDataDrawer.csという名前で保存して再読み込みをしてください。GUIContent.none);}}このように、dataフィールドのInspectorでの見た目をカスタムすることができました。今回の場合、もともとの状態のほうが見やすいのですが自前でカスタムすることができる、というのがわかればOKです。ReorderableListと組み合わせしてみるReorderableListはMecanimなどのPriority変更などで使われているUI部分です。順番が重要なリストをInspector上で変更したい場合はReorderableListを使うのが現実的な手段だと思います。Addressbookのカスタムインスペクターを作成し、自前でAddressbookのInspectorを描画できるようにします。下記スクリプトをEditor/AddressbookInspector.csで保存します。自前で描画している部分。自前で描画している部分。ApplyModifiedPropertiesも忘れずに!reorderableList.DoLayoutList();serializedObject.ApplyModifiedProperties();}}ついでにAddressbook.csのPersonDataもReordableListで扱いやすいように配列にしておきましょう。data;}この状態で最新の状態にするとInspectorが次のような表示になります。右下の+ボタンを押すことで行を追加することができます。ReordableListへのイベント追加、登録が若干適当ではありますがまぁまぁ、、、、うごいているので良しとしましょう。実際に使う場合はReordableListのイベントを正しく設定してください。ドキュメントに記載がありませんが、安藤さんのUnityEditor拡張に詳しく記載あったり、下記ページにイベントについて書いてあったりします。GUIまとめ簡単ではありますが、ReorderableListとPropertyDrawerを組み合わせた場合のやり方についてまとめました。primitiveな配列以外を保存したり、描画しようとするとカスタムインスペクター+drawElementCallbackだとかなりつらい感じになってしまうのでPropertyDrawerを作成して利用するのが作り方的にもやりやすいかと思います。chobi_e課題になりそうなのがあったら広く浅くジャンル問わず解決していくスタイル。Cをよく書いていたなんでもやさん。