【Unity】【エディタ拡張】タブを使ったレイアウトを実装する

f:id:halya_11:20180807170733p:plain

FBX Importerなどで使われているタブ表示を実装する方法です。

やりたいこと

f:id:halya_11:20180807170714p:plain

こういうやつです。

実装

ソースコードです。

using UnityEngine;
using UnityEditor;
using System.Linq;

public class EditorTabSample : EditorWindow {

    enum Tab
    {
        Sample1,
        Sample2,
        SampleLongLongTab,
    }

    private Tab _tab = Tab.Sample1;

    [MenuItem("Window/Tab Sample")]
    private static void Open()
    {
        var window = GetWindow<EditorTabSample>("Tab Sample");
    }

    private void OnGUI()
    {
        using (new EditorGUILayout.HorizontalScope()) {
            GUILayout.FlexibleSpace();
            // タブを描画する
            _tab = (Tab)GUILayout.Toolbar((int)_tab, Styles.TabToggles, Styles.TabButtonStyle, Styles.TabButtonSize);
            GUILayout.FlexibleSpace();
        }
    }

    // Style定義
    private static class Styles
    {
        private static GUIContent[] _tabToggles = null;
        public static GUIContent[] TabToggles{
            get {
                if (_tabToggles == null) {
                    _tabToggles = System.Enum.GetNames(typeof(Tab)).Select(x => new GUIContent(x)).ToArray();
                }
                return _tabToggles;
            }
        }
        
        public static readonly GUIStyle TabButtonStyle = "LargeButton";

        // GUI.ToolbarButtonSize.FitToContentsも設定できる
        public static readonly GUI.ToolbarButtonSize TabButtonSize = GUI.ToolbarButtonSize.Fixed;
    }
}

今回はWindowにタブを表示しています。
説明はコメントに書いた通りです。

結果

上記のWindowを開いた結果です。

f:id:halya_11:20180807170733p:plain

正常にタブが表示されていることが確認できました。

参考

今回情報が少なかったので、C# ReferenceのLightingウィンドウのソースコードを参考にさせていただきました。

github.com