はじめに
この記事は、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になり編集可能なメソッドが正式に用意されるようになりました。
従来の方法で追加したものを表示する方法
新しい方法
Untiy 6.3になり要素を追加するメソッドが正式に用意されるようになりました。
また、インタラクティブに表示や非表示、移動が可能となっています。
要素の移動や表示、非表示
ツールバーの空白の箇所で右クリックしてEdit Modeもしくは任意の要素をCtrl押下しながらD&Dで移動が可能です。また、任意の要素を右クリックしてHideを選択することで不要なUIを非表示にすることもできます。
この機能で、(通常は)今まで不可能だったプレイモードボタンを左寄せにしたりすることが可能となっています!
要素の追加
追加も容易に可能となっています。ここでは公式サンプルとデフォルトで用意されているものをいくつか紹介します。
公式ドキュメント
// 第一引数はメニューとして表示されるパス
// 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ウィンドウを開くボタンを追加する例を紹介していました。
ツールバーの空白の箇所で右クリックもしくは三点リーダーからExamples/Open Project Settingsで表示されるようになります。
こちらもほかの要素と同様、移動や表示、非表示が可能となっています。
その他要素
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}"));
}
おわりに
2025/12/24 一部文章修正
GUIツールにおけるTier1の場所が公式で編集可能となって扱いやすくなり、Unity上での作業が向上するのではないかと思います。(実際に業務でもToolbarの編集を行ってツールのボタンを配置したりしていました。)
この紹介記事でUnityでの作業効率が向上する足掛かりとなれば幸いです。







