みなさん、こんにちは。SAT-BOXのツバメです。
今回の記事はタイトルにもあるように、開発をしていて個人的に便利だなと思った、
Unityのエディター拡張についてのお話です。
● プロパティをエディター拡張で管理できる「PropertyDrawer」!
開発をしていて、List型の構造体を使いたかったのですが、
Inspectorから情報の設定をしようとしても、今までList型の単体情報でしか、
拡張をしたことがなく、どうしようかと思っていたところ、
「PropertyDrawer」なるものがあることに気が付きました!
これを使えば複数のプロパティでも表示できるはず!
●さっそく拡張開始!
とりあえず、ベースとなる情報を持つ部分を作成
次にリストでInspectorに表示するためのエディター拡張部分を作成
ここまでは既に知っている情報でした。いつもならここで情報を設定できるように
するのですが、 List型にするとうまく表示されなかったです
●ここでPropertyDrawerの登場!
そこでPropertyDrawerの出番です!さっそくコードを見てみましょう。
意外と短いコードで書けました。やっていることは単純です。
各プロパティーの位置やサイズ情報を持つRectを事前に作って、
EditorGUI.PropertyFieldで各プロパティを表示しているだけです。
Rectは直接入力もできますが、個人的にこっちの書き方が好きです。
基本的に書くコードは今までとそこまで違いがなかったのですが、
どうやら[TestList]の構造体のInspectorの表示をここで処理しているみたいです。
classの前に[CustomPropertyDrawer(typeof(TestPropertyList.TestList))]を書いて、
OnGUIの上書きで表示しているみたいですね。処理は分かりやすいですね。
あと、PropertyScopeなるものがありますが、これは更新をした時に
Inspector上の文字などをBoldにして更新分かりやすくしてくれる機能みたいです。
まぁ、無くてもいいですが、あったほうが拡張してる感あるので入れました!
●完成品がコチラ!
無事表示ができました!ですが、項目数が増えると何が何だか分からなくなりそう…。
EditorGUI.LabelFieldでも表示したりすれば、もっとキレイになりそう…。
●やってみた
前よりは見やすくなったはず…。
拡張するに当たって、TestPropertyListEditor.csのリストの要素の高さを増やしています
増やさないと表示がおかしくなったので、表示の範囲指定はこっち任せみたいですね。
もっと拡張できれば設定したマテリアルのテクスチャ画像を表示したり
出来るかもしれませんが、今回はここまでにしておきます。
以上、ツバメでした!