Edited at

InspectorのVector3表示を改善するAttribute作った

More than 5 years have passed since last update.


前提

UnityでVector3をInspectorで表示すると、ちょう縦幅を使ってて、だるい。

 

Unity3.x系だと、ここではEditorのみを書かなきゃいけなかったけど、

Unity4.x系からAttributeを自作すればInspectorの表示を自分で編集できる様になった。

Editorっていうと、特定の開発環境専用のツールのイメージがあったけど、

Attributeはもっと汎用的な、「UnityのInspectorってこうだったらいいよね」を拡張するのに特化した感じ。

個人的な感想だし、上手く表現出来ないけど。

   


Attributeとは?

ちなみにAttributeって何?って時の為に、

4.x系から追加されているRangeAttributeなどがある。

値の範囲をInspector側にも制限出来るので便利。

 


hoge.cs

[RangeAttribute(0, 10.0f)]

public float duration = 1;

みたいな感じでfloatかintの上にAttribute付けてあげると

 

こんな感じにスライドバーで値を調整出来る。

  


本題

ちなみに自作Attributeの作り方は、公式Blogで説明してるけど、

説明してるsampleがserverAdrressの為の正規表現で文字列制限Attributeなのだ。

 

Vector3の表示を変えるには、自作するしか無いのか!!!くそが

 

という事で、作ってみました。


https://github.com/anchan828/property-drawer-collection/tree/master/Vector3FieldAttribute

@kyusyukeigoさんのご指導のおかげで、なんとかpull requestできました。

ありがとうございます!!!

このリポジトリには便利Attributeが他にもあるので有効活用したいです。

 


ハマりどころ

4時間くらい謎のエラーにハマっておりました。

Vector3Fieldで表示されるのは、labelVector3の2行分になります。

そのため、一工夫しないと以下の様な表示になってしまいます。

 

1行以上の表示になりうる値を表示したい時は、

PropertyDrawerGetPropertyHeightから表示領域の調整を行う必要があります。


hoge.cs

public override float GetPropertyHeight (SerializedProperty property, GUIContent label)

{
   return base.GetPropertyHeight (property, label) + 30;
}

 

このように、デフォルトの表示領域が一行分になっているので、

表示領域の高さに+30とかしてやれば、ちょうど良い感じになりました。

 

Attributeおもしろいし、便利!