3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity 6.3 で新しくなったToolbarを試す

Last updated at Posted at 2025-12-22

はじめに

この記事は、Unity Advent Calendar 2025 23日目の記事です。

今回は最近リリースされたUnity 6.3で実装されたツールバーの機能やMainToolbarについて紹介したいと思います。

従来の方法

従来の方法ではUnityEditor.ToolbarからToolbarのVisualElementをReflectionで取得してくるという非合法(?)な方法で編集していました。

よくあるテンプレ
[InitializeOnLoadMethod]
private static void InitializeOnLoadMethod()
    => EditorApplication.update += OnUpdate;
private static void OnUpdate()
{
    var toolbarType = typeof(UnityEditor.Editor).Assembly.GetType("UnityEditor.Toolbar");
    var toolbars = Resources.FindObjectsOfTypeAll(toolbarType);
    var fieldInfo = toolbarType.GetField("m_Root", BindingFlags.NonPublic | BindingFlags.Instance);
    var toolbar = Convert.ChangeType(toolbars.FirstOrDefault(), toolbarType);
    var field = fieldInfo.GetValue(toolbar);

    var root = field as VisualElement;
    var left = root.Q("ToolbarZoneLeftAlign");
    left.Add(new ToolbarButton(() => Debug.Log("Custom Button Clicked")) { text = "Custom Button" });

    EditorApplication.update -= OnUpdate;
}

しかしUnity 6.3より、これを実行すると以下のような警告とともにデフォルトでは表示されなくなります。

We have detected that your project includes custom elements added to the Unity Editor's main toolbar using unsupported methods. This approach is not supported and will lead to issues in future versions. Refer to the official API documentation for adding custom elements to the main toolbar.

Your custom toolbar elements can be unhidden via the context menu (right-click the main toolbar -> Unsupported User Elements).
UnityEngine.UIElements.VisualElement:Add (UnityEngine.UIElements.VisualElement)
CustomToolbar:OnUpdate () (at Assets/Scripts/CustomToolbar.cs:25)
UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()

以下日本語訳
Unityエディターのメインツールバーに、サポートされていない方法でカスタム要素が追加されていることを検出しました。
この方法はサポートされておらず、将来のバージョンで問題が発生する原因となります。
メインツールバーへのカスタム要素の追加については、公式APIドキュメントを参照してください。

ですが、Unity 6.3になり編集可能なメソッドが正式に用意されるようになりました。

従来の方法で追加したものを表示する方法

Unity 6.3では非推奨となっていますが、まだ利用できる状態にはなっています。

ツールバーの空白の箇所で右クリックもしくは三点リーダーからUnsupported User Elementsで表示されるようになります。

1.png

新しい方法

Untiy 6.3になり要素を追加するメソッドが正式に用意されるようになりました。
また、インタラクティブに表示や非表示、移動が可能となっています。

要素の移動や表示、非表示

ツールバーの空白の箇所で右クリックしてEdit Modeもしくは任意の要素をCtrl押下しながらD&Dで移動が可能です。また、任意の要素を右クリックしてHideを選択することで不要なUIを非表示にすることもできます。

2.png

この機能で、(通常は)今まで不可能だったプレイモードボタンを左寄せにしたりすることが可能となっています!

3.png

ちなみにUnity 6というCaptionのみ編集不可です。

1.png

要素の追加

追加も容易に可能となっています。ここでは公式サンプルとデフォルトで用意されているものをいくつか紹介します。

公式ドキュメント

// 第一引数はメニューとして表示されるパス
// defaultDockPositionはデフォルトで表示される場所
[MainToolbarElement("Examples/Open Project Settings", defaultDockPosition = MainToolbarDockPosition.Middle)]
public static MainToolbarElement ProjectSettingsButton()
{
    var icon = EditorGUIUtility.IconContent("SettingsIcon").image as Texture2D;
    var content = new MainToolbarContent(icon);
    return new MainToolbarButton(content, () => { SettingsService.OpenProjectSettings(); });
}

公式サンプルでは、Project settingsウィンドウを開くボタンを追加する例を紹介していました。

2.png

ツールバーの空白の箇所で右クリックもしくは三点リーダーからExamples/Open Project Settingsで表示されるようになります。

1.png

こちらもほかの要素と同様、移動や表示、非表示が可能となっています。

MainToolbarElementVisualElementではないので、以下のような詳細なカスタマイズは利用できなくなっています。

1.png

その他要素

Button以外にも、デフォルトではDropdown Label Slider Toggleが用意されています。ここでは最小構成で紹介しています。

[MainToolbarElement("Examples/Dropdown", defaultDockPosition = MainToolbarDockPosition.Middle)]
public static MainToolbarElement Dropdown()
{
    var content = new MainToolbarContent("Dropdown");
    return new MainToolbarDropdown(
        content,
        rect =>
        {
            var menu = new GenericMenu();
            menu.AddItem(new GUIContent("Option 1"), false, () => Debug.Log("Option 1 selected"));
            menu.AddItem(new GUIContent("Option 2"), false, () => Debug.Log("Option 2 selected"));
            menu.DropDown(rect);
        });
}

[MainToolbarElement("Examples/Label", defaultDockPosition = MainToolbarDockPosition.Middle)]
public static MainToolbarElement Label()
{
    var content = new MainToolbarContent("Custom Label");
    return new MainToolbarLabel(content);
}

[MainToolbarElement("Examples/Slider", defaultDockPosition = MainToolbarDockPosition.Middle)]
public static MainToolbarElement Slider()
{
    var content = new MainToolbarContent("Custom Slider");
    return new MainToolbarSlider(content, 0f, 0f, 100f, (value) => Debug.Log($"Slider value: {value}"));
}

[MainToolbarElement("Examples/Toggle", defaultDockPosition = MainToolbarDockPosition.Middle)]
public static MainToolbarElement Toggle()
{
    var content = new MainToolbarContent("Custom Toggle");
    return new MainToolbarToggle(content, false, (value) => Debug.Log($"Toggle value: {value}"));
}

4.png

おわりに

2025/12/24 一部文章修正

GUIツールにおけるTier1の場所が公式で編集可能となって扱いやすくなり、Unity上での作業が向上するのではないかと思います。(実際に業務でもToolbarの編集を行ってツールのボタンを配置したりしていました。)

この紹介記事でUnityでの作業効率が向上する足掛かりとなれば幸いです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?