diff --git a/Assets/ModuleEditor/TestEditorWindow.cs b/Assets/ModuleEditor/TestEditorWindow.cs deleted file mode 100644 index f6fc214..0000000 --- a/Assets/ModuleEditor/TestEditorWindow.cs +++ /dev/null @@ -1,27 +0,0 @@ -using UnityEditor; -using UnityEngine; -using UnityEngine.UIElements; - -public class TestEditorWindow : EditorWindow { - [SerializeField] - private VisualTreeAsset m_VisualTreeAsset = default; - - [MenuItem("Window/MuHua/TestEditorWindow")] - public static void ShowExample() { - TestEditorWindow wnd = GetWindow(); - wnd.titleContent = new GUIContent("TestEditorWindow"); - } - - public void CreateGUI() { - // Each editor window contains a root VisualElement object - VisualElement root = rootVisualElement; - - // VisualElements objects can contain other VisualElement following a tree hierarchy. - VisualElement label = new Label("Hello World! From C#"); - root.Add(label); - - // Instantiate UXML - VisualElement labelFromUXML = m_VisualTreeAsset.Instantiate(); - root.Add(labelFromUXML); - } -} diff --git a/Assets/ModuleEditor.meta b/Packages/UITool/Editor.meta similarity index 77% rename from Assets/ModuleEditor.meta rename to Packages/UITool/Editor.meta index c95b5d5..f05cc0d 100644 --- a/Assets/ModuleEditor.meta +++ b/Packages/UITool/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ed61f5627e04e114eb2c086ae01dc7b4 +guid: f59b127d657274c4e9b94a15b801c1a1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/UITool/Editor/ModuleUIEditor.cs b/Packages/UITool/Editor/ModuleUIEditor.cs new file mode 100644 index 0000000..7a6ac15 --- /dev/null +++ b/Packages/UITool/Editor/ModuleUIEditor.cs @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEngine.UIElements; +using UnityEditor.UIElements; +using MuHua; + +namespace MuHuaEditor { + /// + /// 编辑器 + /// + public abstract class ModuleUIEditor : Editor where T : Object { + /// UXML 资源 + public VisualTreeAsset VisualTreeAsset = default; + + /// 选中目标 + protected T value; + /// 绑定文档 + public VisualElement Element = null; + /// 控件列表 + public List controls = new List(); + + public virtual void Awake() => value = target as T; + + /// 在OnEnable中注册 + private void OnEnable() => EditorApplication.update += Update; + + /// 在OnDisable中注销 + private void OnDisable() => EditorApplication.update -= Update; + + public override VisualElement CreateInspectorGUI() { + VisualElement root = new VisualElement(); + // 1. 添加 Script 字段(只读) + var scriptProperty = serializedObject.FindProperty("m_Script"); + if (scriptProperty != null) { + var scriptField = new PropertyField(scriptProperty); + scriptField.SetEnabled(false); // 只读 + root.Add(scriptField); + } + // 实例化 UXML + if (VisualTreeAsset != null) { + Element = VisualTreeAsset.Instantiate(); + root.Add(Element); + Initial(); + } + // 如果没设置 UXML,返回默认 Inspector + return root ?? new IMGUIContainer(() => DrawDefaultInspector()); + } + + public virtual void Update() => controls.ForEach(control => control.Update()); + + public virtual void OnDestroy() => controls.ForEach(control => control.Dispose()); + + /// 初始化 + public abstract void Initial(); + + /// 添加控件 + public void AddControl(UIControl control) => controls.Add(control); + /// 移除控件 + public void RemoveControl(UIControl control) => controls.Remove(control); + /// 查询UI元素 + public VE Q(string name = null, string className = null) where VE : VisualElement => Element.Q(name, className); + } +} \ No newline at end of file diff --git a/Assets/ModuleEditor/TestEditorWindow.cs.meta b/Packages/UITool/Editor/ModuleUIEditor.cs.meta similarity index 52% rename from Assets/ModuleEditor/TestEditorWindow.cs.meta rename to Packages/UITool/Editor/ModuleUIEditor.cs.meta index 02afdda..ae151c3 100644 --- a/Assets/ModuleEditor/TestEditorWindow.cs.meta +++ b/Packages/UITool/Editor/ModuleUIEditor.cs.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 -guid: ccbcb6aee5874ac4ba30fcb269d7c7ba +guid: a8a211ecbf2acb642a002e2ccac32de4 MonoImporter: externalObjects: {} serializedVersion: 2 - defaultReferences: - - m_VisualTreeAsset: {fileID: 9197481963319205126, guid: d23b67a16b48c2243aabe57056dbfbed, type: 3} + defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: diff --git a/Packages/UITool/Editor/ModuleUIEditorWindow.cs b/Packages/UITool/Editor/ModuleUIEditorWindow.cs new file mode 100644 index 0000000..0b0930e --- /dev/null +++ b/Packages/UITool/Editor/ModuleUIEditorWindow.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using UnityEngine.UIElements; +using MuHua; + +namespace MuHuaEditor { + /// + /// 编辑器窗口 + /// + public abstract class ModuleUIEditorWindow : EditorWindow { + /// UXML 资源 + public VisualTreeAsset VisualTreeAsset = default; + + /// 绑定文档 + public VisualElement Element; + /// 控件列表 + public List controls = new List(); + + public virtual void CreateGUI() { + // Instantiate UXML + Element = VisualTreeAsset.Instantiate(); + Element.style.flexGrow = 1; + rootVisualElement.Add(Element); + Initial(); + } + + public virtual void Update() => controls.ForEach(control => control.Update()); + + public virtual void OnDestroy() => controls.ForEach(control => control.Dispose()); + + /// 初始化 + public abstract void Initial(); + + /// 添加控件 + public void AddControl(UIControl control) => controls.Add(control); + /// 移除控件 + public void RemoveControl(UIControl control) => controls.Remove(control); + /// 查询UI元素 + public T Q(string name = null, string className = null) where T : VisualElement => Element.Q(name, className); + } +} \ No newline at end of file diff --git a/Packages/UITool/Editor/ModuleUIEditorWindow.cs.meta b/Packages/UITool/Editor/ModuleUIEditorWindow.cs.meta new file mode 100644 index 0000000..d88925d --- /dev/null +++ b/Packages/UITool/Editor/ModuleUIEditorWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a2fd8030b7392643995372e5c88631f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleEditor/ModuleEditor.asmdef b/Packages/UITool/Editor/MuHuaEditor.UITool.asmdef similarity index 80% rename from Assets/ModuleEditor/ModuleEditor.asmdef rename to Packages/UITool/Editor/MuHuaEditor.UITool.asmdef index d0392dc..3c94a27 100644 --- a/Assets/ModuleEditor/ModuleEditor.asmdef +++ b/Packages/UITool/Editor/MuHuaEditor.UITool.asmdef @@ -1,8 +1,8 @@ { - "name": "ModuleEditor", + "name": "MuHuaEditor.UITool", "rootNamespace": "", "references": [ - "GUID:432b70115e987f44abb984cfe7de384f" + "GUID:6206345d516a2bb4a821a7ee90e1b5d5" ], "includePlatforms": [ "Editor" diff --git a/Assets/ModuleEditor/ModuleEditor.asmdef.meta b/Packages/UITool/Editor/MuHuaEditor.UITool.asmdef.meta similarity index 76% rename from Assets/ModuleEditor/ModuleEditor.asmdef.meta rename to Packages/UITool/Editor/MuHuaEditor.UITool.asmdef.meta index d459240..15ae36d 100644 --- a/Assets/ModuleEditor/ModuleEditor.asmdef.meta +++ b/Packages/UITool/Editor/MuHuaEditor.UITool.asmdef.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 779534da92936794a829f8bf18309372 +guid: 3a65c91317a32ac438ed8542cf646c2f AssemblyDefinitionImporter: externalObjects: {} userData: