From 63b30ebd035eb3d6c6346f49d2da12a299df5da1 Mon Sep 17 00:00:00 2001 From: MuHua-123 <136542559+MuHua-123@users.noreply.github.com> Date: Sat, 13 Sep 2025 15:48:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ModuleInput/InputControl/InputMenu.cs | 9 ++- Assets/ModuleCore/ModuleSingle/ManagerMenu.cs | 81 ------------------- .../ModuleSingle/ManagerMenu.cs.meta | 11 --- .../ModuleUI/ModuleUISingle/UIShortcutMenu.cs | 53 +++++++++++- .../SampleScene/SampleScene.unity | 47 +---------- 5 files changed, 60 insertions(+), 141 deletions(-) delete mode 100644 Assets/ModuleCore/ModuleSingle/ManagerMenu.cs delete mode 100644 Assets/ModuleCore/ModuleSingle/ManagerMenu.cs.meta diff --git a/Assets/ModuleCore/ModuleInput/InputControl/InputMenu.cs b/Assets/ModuleCore/ModuleInput/InputControl/InputMenu.cs index def603b..59a6e37 100644 --- a/Assets/ModuleCore/ModuleInput/InputControl/InputMenu.cs +++ b/Assets/ModuleCore/ModuleInput/InputControl/InputMenu.cs @@ -19,11 +19,16 @@ public class InputMenu : InputControl { /// 鼠标左键 public void OnMouseLeft(InputValue inputValue) { if (inputValue.isPressed) return; - ManagerMenu.I.Close(); + UIShortcutMenu.I.Close(); } /// 鼠标右键 public void OnMouseRight(InputValue inputValue) { - ManagerMenu.I.Open(); + UIShortcutMenu.I.Add("测试1/测试11", () => { Debug.Log("测试1/测试11"); }); + UIShortcutMenu.I.Add("测试1/测试12", () => { Debug.Log("测试1/测试12"); }); + + UIShortcutMenu.I.Add("测试2", () => { Debug.Log("测试2"); }); + + UIShortcutMenu.I.Open(); } #endregion } diff --git a/Assets/ModuleCore/ModuleSingle/ManagerMenu.cs b/Assets/ModuleCore/ModuleSingle/ManagerMenu.cs deleted file mode 100644 index 851c039..0000000 --- a/Assets/ModuleCore/ModuleSingle/ManagerMenu.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using MuHua; - -/// -/// 菜单管理器 -/// -public class ManagerMenu : ModuleSingle { - - private List datas = new List(); - - protected override void Awake() => NoReplace(false); - - private void Start() { - // 初始化菜单项数据 - Add("建筑/伐木场", () => Debug.Log("伐木场")); - Add("建筑/农场", () => Debug.Log("农场")); - Add("建筑/矿场", () => Debug.Log("矿场")); - Add("建筑/房屋/木屋", () => Debug.Log("木屋")); - Add("建筑/房屋/豪宅", () => Debug.Log("豪宅")); - - Add("单位/步兵", () => Debug.Log("步兵")); - Add("单位/骑兵", () => Debug.Log("骑兵")); - - Add("拆除", () => Debug.Log("拆除")); - } - - public void Open() => UIShortcutMenu.I.Open(datas); - - public void Close() => UIShortcutMenu.I.Close(); - - /// 添加菜单项(方法) - public void Add(string name, Action callback) { - string[] names = name.Split('/'); - - List datas = this.datas; - for (int i = 0; i < names.Length; i++) { - string menu = names[i]; - DataMenuItem item = datas.Find(obj => obj.name == menu); - if (item == null) { - item = new DataMenuItem { name = menu }; - if (i == names.Length - 1) { item.callback = callback; } - datas.Add(item); - } - datas = item.items; - } - } - /// 移除菜单项 - public void Remove(string name) { - string[] names = name.Split('/'); - List datas = this.datas; - DataMenuItem parent = null; - DataMenuItem target = null; - - for (int i = 0; i < names.Length; i++) { - string menu = names[i]; - target = datas.Find(obj => obj.name == menu); - if (target == null) return; // 未找到,直接返回 - if (i == names.Length - 1) { - // 找到要移除的项 - datas.Remove(target); - return; - } - parent = target; - datas = target.items; - } - } -} -/// -/// 菜单项目 -/// -public class DataMenuItem { - /// 名称 - public string name; - /// 回调 - public Action callback; - /// 子菜单项 - public List items = new List(); -} \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleSingle/ManagerMenu.cs.meta b/Assets/ModuleCore/ModuleSingle/ManagerMenu.cs.meta deleted file mode 100644 index d662290..0000000 --- a/Assets/ModuleCore/ModuleSingle/ManagerMenu.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4fbad1b7bdd1ba34da55091f94b08438 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleUI/ModuleUISingle/UIShortcutMenu.cs b/Assets/ModuleCore/ModuleUI/ModuleUISingle/UIShortcutMenu.cs index a08a728..206a8c5 100644 --- a/Assets/ModuleCore/ModuleUI/ModuleUISingle/UIShortcutMenu.cs +++ b/Assets/ModuleCore/ModuleUI/ModuleUISingle/UIShortcutMenu.cs @@ -13,6 +13,9 @@ public class UIShortcutMenu : ModuleUISingle { public VisualTreeAsset menuTreeAsset; /// 项目模板 public VisualTreeAsset itemTreeAsset; + + /// 数据列表 + public List datas = new List(); /// 控件列表 public static List controls = new List(); @@ -25,7 +28,7 @@ public class UIShortcutMenu : ModuleUISingle { private void OnDestroy() => controls.ForEach(control => control.Dispose()); /// 打开菜单 - public void Open(List datas) { + public void Open() { Close(); Vector3 position = UITool.GetMousePosition(Element); UIMenuPanel menuPanel = Create(); @@ -48,6 +51,43 @@ public class UIShortcutMenu : ModuleUISingle { return menuPanel; } + /// 添加菜单项(方法) + public void Add(string name, Action callback) { + string[] names = name.Split('/'); + + List datas = this.datas; + for (int i = 0; i < names.Length; i++) { + string menu = names[i]; + DataMenuItem item = datas.Find(obj => obj.name == menu); + if (item == null) { + item = new DataMenuItem { name = menu }; + if (i == names.Length - 1) { item.callback = callback; } + datas.Add(item); + } + datas = item.items; + } + } + /// 移除菜单项 + public void Remove(string name) { + string[] names = name.Split('/'); + List datas = this.datas; + DataMenuItem parent = null; + DataMenuItem target = null; + + for (int i = 0; i < names.Length; i++) { + string menu = names[i]; + target = datas.Find(obj => obj.name == menu); + if (target == null) return; // 未找到,直接返回 + if (i == names.Length - 1) { + // 找到要移除的项 + datas.Remove(target); + return; + } + parent = target; + datas = target.items; + } + } + /// 添加控件 public static void AddControl(UIControl control) => controls.Add(control); /// 移除控件 @@ -121,3 +161,14 @@ public class UIMenuPanel : ModuleUIPanel, UIControl { } } } +/// +/// 菜单项目 +/// +public class DataMenuItem { + /// 名称 + public string name; + /// 回调 + public Action callback; + /// 子菜单项 + public List items = new List(); +} \ No newline at end of file diff --git a/Assets/SceneManager/SampleScene/SampleScene.unity b/Assets/SceneManager/SampleScene/SampleScene.unity index 95466b5..1679d26 100644 --- a/Assets/SceneManager/SampleScene/SampleScene.unity +++ b/Assets/SceneManager/SampleScene/SampleScene.unity @@ -534,8 +534,7 @@ Transform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1646925906} + m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1439912284 @@ -689,50 +688,6 @@ MonoBehaviour: m_EditorClassIdentifier: document: {fileID: 670296963} SlideButtonTemplate: {fileID: 9197481963319205126, guid: 9452bd34d4b5bff4084d975753638b86, type: 3} ---- !u!1 &1646925905 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1646925906} - - component: {fileID: 1646925907} - m_Layer: 0 - m_Name: ManagerMenu - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1646925906 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646925905} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1439912283} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1646925907 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646925905} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4fbad1b7bdd1ba34da55091f94b08438, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &1922845062 GameObject: m_ObjectHideFlags: 0