55using System . Reflection ;
66
77using UnityEditor ;
8- using UnityEngine ;
98using Object = UnityEngine . Object ;
109using Unity . EditorCoroutines . Editor ;
10+ using UnityEngine ;
11+
1112#if UNITY_2019_1_OR_NEWER
1213using UnityEngine . UIElements ;
1314#else
@@ -30,7 +31,11 @@ static ToolboxEditorToolbar()
3031 }
3132
3233 private static readonly Type containterType = typeof ( IMGUIContainer ) ;
34+ #if UNITY_6000_3_OR_NEWER
35+ private static readonly Type toolbarType = typeof ( UnityEditor . Editor ) . Assembly . GetType ( "UnityEditor.MainToolbarWindow" ) ;
36+ #else
3337 private static readonly Type toolbarType = typeof ( UnityEditor . Editor ) . Assembly . GetType ( "UnityEditor.Toolbar" ) ;
38+ #endif
3439 private static readonly Type guiViewType = typeof ( UnityEditor . Editor ) . Assembly . GetType ( "UnityEditor.GUIView" ) ;
3540#if UNITY_2020_1_OR_NEWER
3641 private static readonly Type backendType = typeof ( UnityEditor . Editor ) . Assembly . GetType ( "UnityEditor.IWindowBackend" ) ;
@@ -55,24 +60,61 @@ private static IEnumerator Initialize()
5560 {
5661 while ( toolbar == null )
5762 {
58- var toolbars = Resources . FindObjectsOfTypeAll ( toolbarType ) ;
59- if ( toolbars == null || toolbars . Length == 0 )
63+ if ( ! TryGetToolbarInstance ( out toolbar ) )
6064 {
6165 yield return null ;
6266 continue ;
6367 }
64- else
65- {
66- toolbar = toolbars [ 0 ] ;
67- }
6868 }
6969
70+ #if UNITY_6000_3_OR_NEWER
71+ VisualElement root = null ;
72+ if ( toolbar is EditorWindow editorWindow )
73+ {
74+ root = editorWindow . rootVisualElement ;
75+ }
76+
77+ var builder = root . Query < VisualElement > ( name : "DockArea" ) ;
78+ var states = builder . Build ( ) ;
79+
80+ var toolbarLeftZone = states . AtIndex ( 0 ) ;
81+ var leftElement = new VisualElement ( ) ;
82+ leftElement . name = "Editor Toolbox Left Area" ;
83+ leftElement . StretchToParentSize ( ) ;
84+ leftElement . style . left = 10 ;
85+ leftElement . style . right = 10 ;
86+ leftElement . style . flexGrow = 1 ;
87+ leftElement . style . flexDirection = FlexDirection . Row ;
88+
89+ var leftContainer = new IMGUIContainer ( ) ;
90+ leftContainer . style . flexGrow = 1 ;
91+ leftContainer . onGUIHandler = OnGuiLeft ;
92+ leftElement . Add ( leftContainer ) ;
93+ toolbarLeftZone . Add ( leftElement ) ;
94+
95+ var toolbarRightZone = states . AtIndex ( 1 ) ;
96+ var rightElement = new VisualElement ( ) ;
97+ rightElement . name = "Editor Toolbox Right Area" ;
98+ rightElement . StretchToParentSize ( ) ;
99+ rightElement . style . left = 10 ;
100+ rightElement . style . right = 10 ;
101+ rightElement . style . flexGrow = 1 ;
102+ rightElement . style . flexDirection = FlexDirection . Row ;
103+
104+ var rightContainer = new IMGUIContainer ( ) ;
105+ rightContainer . style . flexGrow = 1 ;
106+ rightContainer . onGUIHandler = OnGuiRight ;
107+
108+ rightElement . Add ( rightContainer ) ;
109+ toolbarRightZone . Add ( rightElement ) ;
110+
111+ #else
70112#if UNITY_2021_1_OR_NEWER
71113 var rootField = toolbar . GetType ( ) . GetField ( "m_Root" , BindingFlags . NonPublic | BindingFlags . Instance ) ;
72114 var root = rootField . GetValue ( toolbar ) as VisualElement ;
73115
74116 var toolbarLeftZone = root . Q ( "ToolbarZoneLeftAlign" ) ;
75- var element = new VisualElement ( )
117+ var leftElement = new VisualElement ( )
76118 {
77119 style =
78120 {
@@ -81,11 +123,11 @@ private static IEnumerator Initialize()
81123 }
82124 } ;
83125
84- var container = new IMGUIContainer ( ) ;
85- container . style . flexGrow = 1 ;
86- container . onGUIHandler + = OnGuiLeft ;
87- element . Add ( container ) ;
88- toolbarLeftZone . Add ( element ) ;
126+ var leftContainer = new IMGUIContainer ( ) ;
127+ leftContainer . style . flexGrow = 1 ;
128+ leftContainer . onGUIHandler = OnGuiLeft ;
129+ leftElement . Add ( leftContainer ) ;
130+ toolbarLeftZone . Add ( leftElement ) ;
89131
90132 var toolbarRightZone = root . Q ( "ToolbarZoneRightAlign" ) ;
91133 var rightElement = new VisualElement ( )
@@ -99,7 +141,7 @@ private static IEnumerator Initialize()
99141
100142 var rightContainer = new IMGUIContainer ( ) ;
101143 rightContainer . style . flexGrow = 1 ;
102- rightContainer . onGUIHandler + = OnGuiRight ;
144+ rightContainer . onGUIHandler = OnGuiRight ;
103145 rightElement . Add ( rightContainer ) ;
104146 toolbarRightZone . Add ( rightElement ) ;
105147#else
@@ -119,6 +161,27 @@ private static IEnumerator Initialize()
119161 handler -= OnGuiLeft ;
120162 handler += OnGuiLeft ;
121163 onGuiHandler . SetValue ( container , handler ) ;
164+ #endif
165+ #endif
166+ }
167+
168+ private static bool TryGetToolbarInstance ( out Object toolbarInstance )
169+ {
170+ #if UNITY_6000_3_OR_NEWER
171+ toolbarInstance = EditorWindow . GetWindow ( toolbarType ) ;
172+ return toolbarInstance != null ;
173+ #else
174+ var toolbars = Resources . FindObjectsOfTypeAll ( toolbarType ) ;
175+ if ( toolbars == null || toolbars . Length == 0 )
176+ {
177+ toolbarInstance = null ;
178+ return false ;
179+ }
180+ else
181+ {
182+ toolbarInstance = toolbars [ 0 ] ;
183+ return true ;
184+ }
122185#endif
123186 }
124187
@@ -130,9 +193,15 @@ private static void OnGuiLeft()
130193 }
131194
132195#if UNITY_2021_1_OR_NEWER
133- using ( new GUILayout . HorizontalScope ( ) )
196+ using ( new EditorGUILayout . VerticalScope ( ) )
134197 {
135- OnToolbarGuiLeft ( ) ;
198+ GUILayout . FlexibleSpace ( ) ;
199+ using ( new EditorGUILayout . HorizontalScope ( ) )
200+ {
201+ OnToolbarGuiLeft ( ) ;
202+ }
203+
204+ GUILayout . FlexibleSpace ( ) ;
136205 }
137206#else
138207 var screenWidth = EditorGUIUtility . currentViewWidth ;
@@ -167,9 +236,15 @@ private static void OnGuiRight()
167236 return ;
168237 }
169238
170- using ( new EditorGUILayout . HorizontalScope ( ) )
239+ using ( new EditorGUILayout . VerticalScope ( ) )
171240 {
172- OnToolbarGuiRight ( ) ;
241+ GUILayout . FlexibleSpace ( ) ;
242+ using ( new EditorGUILayout . HorizontalScope ( ) )
243+ {
244+ OnToolbarGuiRight ( ) ;
245+ }
246+
247+ GUILayout . FlexibleSpace ( ) ;
173248 }
174249 }
175250
@@ -180,7 +255,12 @@ public static void Repaint()
180255 return ;
181256 }
182257
258+ #if UNITY_6000_3_OR_NEWER
259+ var toolbarWindow = EditorWindow . GetWindow ( toolbarType ) ;
260+ toolbarWindow . Repaint ( ) ;
261+ #else
183262 repaintMethod ? . Invoke ( toolbar , null ) ;
263+ #endif
184264 }
185265
186266 public static bool IsToolbarAllowed { get ; set ; } = true ;
0 commit comments