From 9a20ee8ac53d7695962854bed42dddfa5fd7c024 Mon Sep 17 00:00:00 2001 From: MuHua-123 <136542559+MuHua-123@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:08:02 +0800 Subject: [PATCH] 1 --- Assets/ModuleCore/ModuleUI/ModuleUI.cs | 44 +++++++++++++++---- .../ModuleUI/ModuleUIPage/UILoginPage.cs | 8 ++-- Assets/ModuleCore/ModuleUI/UIPopupManager.cs | 18 +------- .../SampleScene/SampleScene.unity | 16 ++++++- .../Runtime/ModuleCoreUI/ModuleUISingle.cs | 42 ++++++++++++++++++ .../ModuleUISingle.cs.meta} | 2 +- .../UITool/Runtime/ModuleTools/UIControl.cs | 2 + .../UITool/Runtime/ModuleTools/UIDirection.cs | 21 --------- .../Runtime/ModuleUIPanel/UIDropdown.cs | 2 +- .../UIScrollView/UIScrollView.cs | 2 +- .../UIScrollView/UIScrollViewH.cs | 2 +- .../UIScrollView/UIScrollViewV.cs | 2 +- .../ModuleUIPanel/UIScroller/UIScrollerH.cs | 2 +- .../ModuleUIPanel/UIScroller/UIScrollerV.cs | 2 +- .../ModuleUIPanel/UISlider/UISliderH.cs | 2 +- .../ModuleUIPanel/UISlider/UISliderV.cs | 2 +- .../UITool/Runtime/ModuleUIPanel/UIWindow.cs | 2 +- 17 files changed, 110 insertions(+), 61 deletions(-) create mode 100644 Packages/UITool/Runtime/ModuleCoreUI/ModuleUISingle.cs rename Packages/UITool/Runtime/{ModuleTools/UIDirection.cs.meta => ModuleCoreUI/ModuleUISingle.cs.meta} (83%) delete mode 100644 Packages/UITool/Runtime/ModuleTools/UIDirection.cs diff --git a/Assets/ModuleCore/ModuleUI/ModuleUI.cs b/Assets/ModuleCore/ModuleUI/ModuleUI.cs index cb66ee1..98a3e6d 100644 --- a/Assets/ModuleCore/ModuleUI/ModuleUI.cs +++ b/Assets/ModuleCore/ModuleUI/ModuleUI.cs @@ -8,24 +8,50 @@ using MuHua; /// /// UI模块 /// -public class ModuleUI : ModuleSingle { - public static EnumPage page; - public static event Action OnJumpPage; +public class ModuleUI : ModuleUISingle { + /// 当前页面 + public static Page Current; + /// 回退页面 + public static Page BackPage; + /// 控件列表 + public static List controls = new List(); + /// 页面跳转事件 + public static event Action OnJumpPage; - public UIDocument document;// 绑定文档 + /// 跳转页面 + public static void Settings(Page pageType) { + BackPage = Current; + Current = pageType; + OnJumpPage?.Invoke(Current); + } + /// 回退页面 + public static void Back() { + Current = BackPage; + OnJumpPage?.Invoke(Current); + } + /// 添加控件 + public static void AddControl(UIControl control) { + controls.Add(control); + } + /// 移除控件 + public static void RemoveControl(UIControl control) { + controls.Remove(control); + } - /// 根目录文档 - public VisualElement root => document.rootVisualElement; + public override VisualElement Element => document.rootVisualElement; protected override void Awake() => NoReplace(); - /// 跳转页面 - public static void Settings(EnumPage pageType) => OnJumpPage?.Invoke(pageType); + private void Update() => controls.ForEach(control => control.Update()); + + private void OnDestroy() => controls.ForEach(control => control.Dispose()); } /// /// 页面 /// -public enum EnumPage { +public enum Page { + /// None, + /// 登录 Login, } \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleUI/ModuleUIPage/UILoginPage.cs b/Assets/ModuleCore/ModuleUI/ModuleUIPage/UILoginPage.cs index d5bad24..2f2d3e3 100644 --- a/Assets/ModuleCore/ModuleUI/ModuleUIPage/UILoginPage.cs +++ b/Assets/ModuleCore/ModuleUI/ModuleUIPage/UILoginPage.cs @@ -25,9 +25,9 @@ public class UILoginPage : ModuleUIPage { ModuleUI.OnJumpPage += ModuleUI_OnJumpPage; } - private void ModuleUI_OnJumpPage(EnumPage page) { - Element.EnableInClassList("document-page-hide", page != EnumPage.Login); - if (page != EnumPage.Login) { return; } + private void ModuleUI_OnJumpPage(Page page) { + Element.EnableInClassList("document-page-hide", page != Page.Login); + if (page != Page.Login) { return; } OpenLoginPanel(); } public void OpenLoginPanel() { @@ -58,7 +58,7 @@ public class UILoginPanel : ModuleUIPanel { InputField2.RegisterCallback>(evt => { password = evt.newValue; }); Button1.clicked += () => parent.OpenRegisterPanel(); Button2.clicked += () => ManagerRequest.I.Login(username, password, (s) => { - ModuleUI.Settings(EnumPage.None); + ModuleUI.Settings(Page.None); Debug.Log(s); }); } diff --git a/Assets/ModuleCore/ModuleUI/UIPopupManager.cs b/Assets/ModuleCore/ModuleUI/UIPopupManager.cs index b62b506..a1a218d 100644 --- a/Assets/ModuleCore/ModuleUI/UIPopupManager.cs +++ b/Assets/ModuleCore/ModuleUI/UIPopupManager.cs @@ -7,25 +7,11 @@ using MuHua; /// /// UI弹出管理器 /// -public class UIPopupManager : ModuleUIPage { - - // public UIPopup dialog; +public class UIPopupManager : ModuleUISingle { public override VisualElement Element => root.Q("Popup"); public VisualElement PopupDialog => Q("PopupDialog"); - private void Awake() { - // dialog = new UIPopup(PopupDialog); - } - private void OnDestroy() { - // config.Release(); - // configMaterial.Release(); - // equipmentSelection.Release(); - // paramrInput.Release(); - } - private void Update() { - // config.Update(); - // configMaterial.Update(); - } + protected override void Awake() => NoReplace(false); } diff --git a/Assets/SceneManager/SampleScene/SampleScene.unity b/Assets/SceneManager/SampleScene/SampleScene.unity index 8e3774d..77d7767 100644 --- a/Assets/SceneManager/SampleScene/SampleScene.unity +++ b/Assets/SceneManager/SampleScene/SampleScene.unity @@ -132,13 +132,14 @@ GameObject: m_Component: - component: {fileID: 670296964} - component: {fileID: 670296963} + - component: {fileID: 670296965} m_Layer: 5 m_Name: "----\u754C\u9762\u6587\u6863----" m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!114 &670296963 MonoBehaviour: m_ObjectHideFlags: 0 @@ -171,6 +172,19 @@ Transform: - {fileID: 1621578791} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &670296965 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 670296962} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ea89ac05041b5d74582ee9d0add233ac, type: 3} + m_Name: + m_EditorClassIdentifier: + document: {fileID: 670296963} --- !u!1 &705507993 GameObject: m_ObjectHideFlags: 0 diff --git a/Packages/UITool/Runtime/ModuleCoreUI/ModuleUISingle.cs b/Packages/UITool/Runtime/ModuleCoreUI/ModuleUISingle.cs new file mode 100644 index 0000000..a891171 --- /dev/null +++ b/Packages/UITool/Runtime/ModuleCoreUI/ModuleUISingle.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UIElements; + +namespace MuHua { + /// + /// 页面单例 + /// + public abstract class ModuleUISingle : MonoBehaviour where Single : ModuleUISingle { + /// 模块单例 + public static Single I => instance; + /// 模块单例 + protected static Single instance; + /// 初始化 + protected abstract void Awake(); + + /// 绑定文档 + public UIDocument document; + /// 根目录文档 + public VisualElement root => document.rootVisualElement; + /// 绑定文档 + public abstract VisualElement Element { get; } + /// 添加UI元素 + public void Add(VisualElement child) => Element.Add(child); + /// 查询UI元素 + public T Q(string name = null, string className = null) where T : VisualElement => Element.Q(name, className); + + /// 替换,并且设置切换场景不销毁 + protected virtual void Replace(bool isDontDestroy = true) { + if (instance != null) { Destroy(instance.gameObject); } + instance = (Single)this; + if (isDontDestroy) { DontDestroyOnLoad(gameObject); } + } + /// 不替换,并且设置切换场景不销毁 + protected virtual void NoReplace(bool isDontDestroy = true) { + if (isDontDestroy) { DontDestroyOnLoad(gameObject); } + if (instance == null) { instance = (Single)this; } + else { Destroy(gameObject); } + } + } +} \ No newline at end of file diff --git a/Packages/UITool/Runtime/ModuleTools/UIDirection.cs.meta b/Packages/UITool/Runtime/ModuleCoreUI/ModuleUISingle.cs.meta similarity index 83% rename from Packages/UITool/Runtime/ModuleTools/UIDirection.cs.meta rename to Packages/UITool/Runtime/ModuleCoreUI/ModuleUISingle.cs.meta index 1481ea1..470db7e 100644 --- a/Packages/UITool/Runtime/ModuleTools/UIDirection.cs.meta +++ b/Packages/UITool/Runtime/ModuleCoreUI/ModuleUISingle.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c2b0340184fec6c45815d13d6a1f7321 +guid: 6a88fdbff78494947b294cfa1754abb4 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/UITool/Runtime/ModuleTools/UIControl.cs b/Packages/UITool/Runtime/ModuleTools/UIControl.cs index e9e304c..5fb271a 100644 --- a/Packages/UITool/Runtime/ModuleTools/UIControl.cs +++ b/Packages/UITool/Runtime/ModuleTools/UIControl.cs @@ -9,5 +9,7 @@ namespace MuHua { public interface UIControl { /// 更新UI状态 public void Update(); + /// 解除UI绑定 + public void Dispose(); } } diff --git a/Packages/UITool/Runtime/ModuleTools/UIDirection.cs b/Packages/UITool/Runtime/ModuleTools/UIDirection.cs deleted file mode 100644 index dfb4217..0000000 --- a/Packages/UITool/Runtime/ModuleTools/UIDirection.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - /// - /// 方向 - /// - [Obsolete("使用类内置的 UIDirection")] - public enum UIDirection { - FromLeftToRight = 0, - FromRightToLeft = 1, - FromTopToBottom = 2, - FromBottomToTop = 3, - - HorizontalAndVertical = 4, - Horizontal = 5, - Vertical = 6, - } -} \ No newline at end of file diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UIDropdown.cs b/Packages/UITool/Runtime/ModuleUIPanel/UIDropdown.cs index 78fb747..22c3c39 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UIDropdown.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UIDropdown.cs @@ -8,7 +8,7 @@ namespace MuHua { /// /// 下拉框 /// - public class UIDropdown : ModuleUIPanel, IDisposable, UIControl { + public class UIDropdown : ModuleUIPanel, UIControl { /// 绑定的画布 internal readonly VisualElement canvas; /// 下拉框容器 diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollView.cs b/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollView.cs index 44a9199..120a3bb 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollView.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollView.cs @@ -9,7 +9,7 @@ namespace MuHua { /// /// 滚动视图 /// - public class UIScrollView : ModuleUIPanel, IDisposable, UIControl { + public class UIScrollView : ModuleUIPanel, UIControl { /// 绑定的画布 public readonly VisualElement canvas; /// 水平滑块 diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollViewH.cs b/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollViewH.cs index 1ac12ab..268ce1f 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollViewH.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollViewH.cs @@ -9,7 +9,7 @@ namespace MuHua { /// /// 滚动视图 - 水平 /// - public class UIScrollViewH : ModuleUIPanel, IDisposable, UIControl { + public class UIScrollViewH : ModuleUIPanel, UIControl { /// 绑定的画布 public readonly VisualElement canvas; /// 元素方向 diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollViewV.cs b/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollViewV.cs index df11b24..7538e7c 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollViewV.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UIScrollView/UIScrollViewV.cs @@ -9,7 +9,7 @@ namespace MuHua { /// /// 滚动视图 - 垂直 /// - public class UIScrollViewV : ModuleUIPanel, IDisposable, UIControl { + public class UIScrollViewV : ModuleUIPanel, UIControl { /// 绑定的画布 public readonly VisualElement canvas; /// 元素方向 diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UIScroller/UIScrollerH.cs b/Packages/UITool/Runtime/ModuleUIPanel/UIScroller/UIScrollerH.cs index 6f36b1c..b8fb66c 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UIScroller/UIScrollerH.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UIScroller/UIScrollerH.cs @@ -8,7 +8,7 @@ namespace MuHua { /// /// 滚动条 - 水平 /// - public class UIScrollerH : ModuleUIPanel, IDisposable, UIControl { + public class UIScrollerH : ModuleUIPanel, UIControl { /// 绑定的画布 public readonly VisualElement canvas; /// 元素方向 diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UIScroller/UIScrollerV.cs b/Packages/UITool/Runtime/ModuleUIPanel/UIScroller/UIScrollerV.cs index 4fae330..4d22255 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UIScroller/UIScrollerV.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UIScroller/UIScrollerV.cs @@ -8,7 +8,7 @@ namespace MuHua { /// /// 滚动条 - 垂直 /// - public class UIScrollerV : ModuleUIPanel, IDisposable, UIControl { + public class UIScrollerV : ModuleUIPanel, UIControl { /// 绑定的画布 public readonly VisualElement canvas; /// 元素方向 diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UISlider/UISliderH.cs b/Packages/UITool/Runtime/ModuleUIPanel/UISlider/UISliderH.cs index 8fd4022..c0c4357 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UISlider/UISliderH.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UISlider/UISliderH.cs @@ -8,7 +8,7 @@ namespace MuHua { /// /// 滑块 - 水平 /// - public class UISliderH : ModuleUIPanel, IDisposable, UIControl { + public class UISliderH : ModuleUIPanel, UIControl { /// 绑定的画布 public readonly VisualElement canvas; /// 元素方向 diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UISlider/UISliderV.cs b/Packages/UITool/Runtime/ModuleUIPanel/UISlider/UISliderV.cs index a7a68e9..6bd1f65 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UISlider/UISliderV.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UISlider/UISliderV.cs @@ -8,7 +8,7 @@ namespace MuHua { /// /// 滑块 - 垂直 /// - public class UISliderV : ModuleUIPanel, IDisposable, UIControl { + public class UISliderV : ModuleUIPanel, UIControl { /// 绑定的画布 public readonly VisualElement canvas; /// 元素方向 diff --git a/Packages/UITool/Runtime/ModuleUIPanel/UIWindow.cs b/Packages/UITool/Runtime/ModuleUIPanel/UIWindow.cs index d9ff7da..b9ea3d4 100644 --- a/Packages/UITool/Runtime/ModuleUIPanel/UIWindow.cs +++ b/Packages/UITool/Runtime/ModuleUIPanel/UIWindow.cs @@ -8,7 +8,7 @@ namespace MuHua { /// /// 悬浮窗口 /// - public abstract class UIWindow : ModuleUIPanel, IDisposable, UIControl { + public abstract class UIWindow : ModuleUIPanel, UIControl { /// 绑定的画布 public readonly VisualElement canvas; /// 隐藏的USS类名