うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】EditorWindow に Unity デフォルト Window のようなヘッダーを追加する

例えば Unity の Console には下図のようにヘッダー領域があり、そこにボタンやトグルなどを表示している

今回はその表示方法について記述する
※内部的にはツールバー (toolbar) と呼ばれている

f:id:hacchi_man:20200116133543p:plain

Header

ヘッダーを描画するのは至極簡単で EditorGUILayout.HorizontalScopeEditorStyles.toolbar を利用すればよい

f:id:hacchi_man:20200116134844p:plain

using UnityEditor;
using UnityEngine;

public class HeaderWindow : EditorWindow
{
    private void OnGUI()
    {
        using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
        {
            GUILayout.FlexibleSpace();
        }
                 // Body Code
    }
}

Unity で定義されている ヘッダー利用できるStyleには以下のものがある

  • EditorStyles.toolbarPopup
  • EditorStyles.toolbarButton
  • EditorStyles.toolbarDropDown
  • EditorStyles.toolbarTextField
  • (EditorStyles.toolbarSearchField)

toolbarSearchField に関しては基本的には利用することが無いので、これが利用されている SarchField について後で記述する

EditorStyles.toolbarPopup

EditorGUILayout.Popup("Popup", 0, new[] {"0", "1"}, EditorStyles.toolbarPopup);

f:id:hacchi_man:20200116140028p:plain

EditorStyles.toolbarButton

if (GUILayout.Button("Button1", EditorStyles.toolbarButton))

f:id:hacchi_man:20200117005146p:plain

EditorStyles.toolbarDropDown

if (EditorGUILayout.DropdownButton(new GUIContent("Dropdown"), FocusType.Passive, EditorStyles.toolbarDropDown))

f:id:hacchi_man:20200117005419p:plain

EditorStyles.toolbarTextField

EditorGUILayout.TextField("Text", EditorStyles.toolbarTextField);

f:id:hacchi_man:20200117005712p:plain

SarchField

SearchField は下図のような検索窓です

Ctrl + A で全選択できたり、文字が入力してあれば ✗ ボタンが表示され全削除できたりします
downOrUpArrowKeyPressedというコールバックも用意されており SearchFieldにフォーカスを当てた状態で上下キーを有効にできます

f:id:hacchi_man:20200117010148p:plain

using UnityEditor;
using UnityEditor.IMGUI.Controls;
using UnityEngine;

public class SearchFieldWindow : EditorWindow
{
    private SearchField _searchField;
    private string _searchText;
 
    private void OnEnable()
    {
        if (_searchField == null)
        {
            _searchField = new SearchField();
            _searchField.downOrUpArrowKeyPressed += SearchFieldOnDownOrUpArrowKeyPressed;
        }           
    }
 
    private void SearchFieldOnDownOrUpArrowKeyPressed()
    {
        Debug.Log("Put Key");
    }
 
    private void OnGUI()
    {
        using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
        {
            _searchText = _searchField.OnToolbarGUI(_searchText);
            GUILayout.FlexibleSpace();
        }
    }
}

参考サイト

UnityEditor.EditorStyles - Unity スクリプトリファレンス
Unity - Scripting API: SearchField