From 97355c6f86e87238d1820ef7b7423bde48d409f3 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 28 Nov 2024 16:10:18 +0900 Subject: [PATCH] =?UTF-8?q?VisualElement=20TabView=20=E3=82=82=E3=81=A9?= =?UTF-8?q?=E3=81=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/VRM10/Editor/Vrm10InstanceEditor.cs | 84 +++++++++++----------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/Assets/VRM10/Editor/Vrm10InstanceEditor.cs b/Assets/VRM10/Editor/Vrm10InstanceEditor.cs index b58789e68..ecfadda39 100644 --- a/Assets/VRM10/Editor/Vrm10InstanceEditor.cs +++ b/Assets/VRM10/Editor/Vrm10InstanceEditor.cs @@ -5,6 +5,9 @@ using UniGLTF; using UniGLTF.Utils; using UnityEditor; using UnityEngine; +using UnityEngine.UIElements; +using UnityEditor.UIElements; + namespace UniVRM10 { @@ -20,8 +23,6 @@ namespace UniVRM10 SpringBone, } - Tab m_tab; - Vrm10Instance m_instance; SerializedProperty m_script; @@ -251,57 +252,60 @@ namespace UniVRM10 } } - - static readonly string[] Tabs = ((Tab[])Enum.GetValues(typeof(Tab))).Select(x => x.ToString()).ToArray(); - - public override void OnInspectorGUI() + public override VisualElement CreateInspectorGUI() { - using (new EditorGUI.DisabledScope(true)) + var root = new VisualElement(); + + root.Bind(serializedObject); { - EditorGUILayout.PropertyField(m_script); + var s = new PropertyField { bindingPath = "m_Script" }; + s.SetEnabled(false); + root.Add(s); } - if (m_instance.Vrm == null) - { - SetupVRM10Object(m_instance); - } + var tabs = new EnumField("tab", default(Tab)); + root.Add(tabs); - var backup = GUI.enabled; - try + var body = new VisualElement(); + List<(Tab, VisualElement)> contents = new() { - GUI.enabled = true; - using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar)) + (Tab.VrmInstance, new IMGUIContainer(GUIVrmInstance)), + (Tab.LookAt, new IMGUIContainer(GUILookAt)), + (Tab.SpringBone, new IMGUIContainer(GUISpringBone)), + }; + foreach (var (tab, content) in contents) + { + // content.visible = tab == Tab.VrmInstance; + content.style.display = tab == Tab.VrmInstance + ? DisplayStyle.Flex + : DisplayStyle.None + ; + body.Add(content); + } + root.Add(body); + + tabs.RegisterValueChangedCallback(e => + { + var selected = (Tab)e.newValue; + foreach (var (tab, content) in contents) { - m_tab = (Tab)GUILayout.Toolbar((int)m_tab, Tabs, new GUIStyle(EditorStyles.toolbarButton), GUI.ToolbarButtonSize.FitToContents); + // content.visible = tab == selected; + content.style.display = tab == selected + ? DisplayStyle.Flex + : DisplayStyle.None + ; } - } - finally - { - GUI.enabled = backup; - } + }); - switch (m_tab) - { - case Tab.VrmInstance: - GUIVrmInstance(); - break; - - case Tab.LookAt: - GUILookAt(); - break; - - case Tab.SpringBone: - GUISpringBone(); - break; - - default: - throw new Exception(); - } - // base.OnInspectorGUI(); + return root; } void GUIVrmInstance() { + if (m_instance.Vrm == null) + { + SetupVRM10Object(m_instance); + } serializedObject.Update(); EditorGUILayout.PropertyField(m_vrmObject); EditorGUILayout.PropertyField(m_updateType);