名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

個人的に便利だと思ったUnityのエディター拡張の話

みなさん、こんにちは。SAT-BOXのツバメです。

 

今回の記事はタイトルにもあるように、開発をしていて個人的に便利だなと思った、

Unityのエディター拡張についてのお話です。

 

● プロパティをエディター拡張で管理できるPropertyDrawer」!

開発をしていて、List型の構造体を使いたかったのですが、

Inspectorから情報の設定をしようとしても、今までList型の単体情報でしか、

拡張をしたことがなく、どうしようかと思っていたところ、

PropertyDrawer」なるものがあることに気が付きました!

 

docs.unity3d.com

これを使えば複数のプロパティでも表示できるはず!

 

さっそく拡張開始!

とりあえず、ベースとなる情報を持つ部分を作成

f:id:sat-box:20190617175511p:plain

次にリストでInspectorに表示するためのエディター拡張部分を作成

f:id:sat-box:20190617175555p:plain

ここまでは既に知っている情報でした。いつもならここで情報を設定できるように

するのですが、 List型にするとうまく表示されなかったです

 

ここでPropertyDrawerの登場!

そこでPropertyDrawerの出番です!さっそくコードを見てみましょう。

f:id:sat-box:20190617175906p:plain

 意外と短いコードで書けました。やっていることは単純です。

各プロパティーの位置やサイズ情報を持つRectを事前に作って、

EditorGUI.PropertyFieldで各プロパティを表示しているだけです。

Rectは直接入力もできますが、個人的にこっちの書き方が好きです。

基本的に書くコードは今までとそこまで違いがなかったのですが、

どうやら[TestList]の構造体のInspectorの表示をここで処理しているみたいです。

classの前に[CustomPropertyDrawer(typeof(TestPropertyList.TestList))]を書いて、

OnGUIの上書きで表示しているみたいですね。処理は分かりやすいですね。

あと、PropertyScopeなるものがありますが、これは更新をした時に

Inspector上の文字などをBoldにして更新分かりやすくしてくれる機能みたいです。

まぁ、無くてもいいですが、あったほうが拡張してる感あるので入れました!

完成品がコチラ!

f:id:sat-box:20190617180752p:plain

無事表示ができました!ですが、項目数が増えると何が何だか分からなくなりそう…。

EditorGUI.LabelFieldでも表示したりすれば、もっとキレイになりそう…。

 

やってみた

f:id:sat-box:20190617181037p:plain

前よりは見やすくなったはず…。

拡張するに当たって、TestPropertyListEditor.csのリストの要素の高さ増やしています

増やさないと表示がおかしくなったので、表示の範囲指定はこっち任せみたいですね。

 

もっと拡張できれば設定したマテリアルのテクスチャ画像を表示したり

出来るかもしれませんが、今回はここまでにしておきます。

以上、ツバメでした!