ちゃこブログ

お絵かきとUnityとBlenderと日記

【Unity】EditorWindowのメニューバーを作る

Editor拡張の小ネタ記事など。。

EditorWindowによくあるメニューバーってどうやって作るんだろう?

f:id:charcotte:20171203233535p:plain
SceneViewにあるメニューバー
自分のEditorWindowにこのようなメニューバー作りたかったんですが、作り方もわからないし、ググり方もわからなかったのでUnityAnswerで質問してしまいました(^O^) 大分前のことなんですが、親切な回答を頂けたので共有します。
answers.unity.com

EditorStyles

UnityのEditorGUIに使用されているGUIStyle、EditorStylesを使用することで作ることができます。

// メニューバー部分の適当なスクリプト
EditorGUILayout.BeginHorizontal( EditorStyles.toolbar, GUILayout.ExpandWidth( true ) );
{
    GUILayout.Button( "button", EditorStyles.toolbarButton, GUILayout.Width( 70 ) );

    GUILayout.Toggle( toggle, "toggle", EditorStyles.toolbarButton, GUILayout.Width( 70 ) );

    EditorGUILayout.IntPopup( 0, new string[] { "popup" }, new int[] { 0 }, EditorStyles.toolbarPopup, GUILayout.Width( 70 ) );

    EditorGUILayout.IntPopup( 0, new string[] { "dropdown" }, new int[] { 0 }, EditorStyles.toolbarDropDown, GUILayout.Width( 70 ) );

    EditorGUILayout.TextField( "", EditorStyles.toolbarTextField, GUILayout.Width( 150 ) );

}
EditorGUILayout.EndHorizontal();

f:id:charcotte:20171203235520p:plain
上記スクリプトの結果
HorizontalScopeにEditorStyles.toolbarを適用することで、そのエリアをメニューバーのようなルックスにしてくれます。オプションにGUILayout.ExpandWidth( true )を指定すると端から端までバーを確実に表示できてGoodです。

HorizontalScopeの中身に、ButtonやらToggleやらPopupやら自分のほしい要素にEditorStyles.toolbarButtonEditorStyles.toolbarPopupなどを適用することで各要素をメニューバーの要素のように表示できました。


特別なクラスがあるかと思っていたので、GUIStyleのみで実現できると知って感動でした。。。これを知ってからはEditorStylesを頻繁に使用しています。
自作EditorWindowがよりイケてる感じになるのでお試しください。

  • EditorStyles.toolbar
  • EditorStyles.toolbarButton
  • EditorStyles.toolbarPopup
  • EditorStyles.toolbarDropDown
  • EditorStyles.toolbarTextField