This commit is contained in:
MuHua-123
2025-09-05 18:02:13 +08:00
parent 9a20ee8ac5
commit f7fab248d4
53 changed files with 1499 additions and 64 deletions
@@ -0,0 +1,73 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
using MuHua;
/// <summary>
/// UI菜单管理器
/// </summary>
public class UIMenuManager : ModuleUISingle<UIMenuManager> {
/// <summary> 菜单模板 </summary>
public VisualTreeAsset menuTreeAsset;
/// <summary> 项目模板 </summary>
public VisualTreeAsset itemTreeAsset;
private UIMenuPanel menu;
public override VisualElement Element => root.Q<VisualElement>("Menu");
protected override void Awake() => NoReplace(false);
public void Open() {
if (menu != null) { Close(); }
Vector3 mousePosition = UITool.GetMousePosition(Element);
menu = BuildMenu(mousePosition);
}
public void Close() {
Element.Clear();
}
public void Settings() {
}
/// <summary> 创建菜单 </summary>
public UIMenuPanel BuildMenu(Vector3 position) {
VisualElement element = menuTreeAsset.Instantiate();
Element.Add(element);
element.transform.position = position;
return new UIMenuPanel(element, itemTreeAsset);
}
}
/// <summary>
/// UI菜单面板
/// </summary>
public class UIMenuPanel : ModuleUIPanel {
public ModuleUIItems<UIItem, DataMenuItem> items;
public VisualElement Container => Q<VisualElement>("Container");
public UIMenuPanel(VisualElement element, VisualTreeAsset templateAsset) : base(element) {
items = new ModuleUIItems<UIItem, DataMenuItem>(Container, templateAsset,
(data, element) => new UIItem(data, element));
}
public void Release() => items.Release();
/// <summary> UI项目 </summary>
public class UIItem : ModuleUIItem<DataMenuItem> {
public UIItem(DataMenuItem value, VisualElement element) : base(value, element) {
}
}
}
/// <summary>
/// 菜单项目
/// </summary>
public class DataMenuItem {
/// <summary> 名称 </summary>
public string name;
/// <summary> 回调 </summary>
public Action callback;
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 422a458e7229d6b4a8fff66af1840238
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: