com.alicizax.unity.editor.e.../Editor/ToolBarExtension/EditorQuickToolBar.cs

63 lines
2.0 KiB
C#
Raw Permalink Normal View History

2025-03-11 17:46:52 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Paps.UnityToolbarExtenderUIToolkit;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace AlicizaX.Editor.Extension
{
[MainToolbarElement("EditorQuickToolBar", alignment: ToolbarAlign.Right, order: 1)]
public class EditorQuickToolBar : IMGUIContainer
{
private static GUIContent toolsDropBtContent;
public void InitializeElement()
{
toolsDropBtContent = EditorGUIUtility.TrTextContentWithIcon("Tools", "工具箱", "CustomTool");
onGUIHandler = MyGUIMethod;
}
private void MyGUIMethod()
{
GUILayout.BeginHorizontal();
if (EditorGUILayout.DropdownButton(toolsDropBtContent, FocusType.Passive, EditorStyles.toolbarPopup,
GUILayout.MaxWidth(90)))
{
DrawEditorToolDropdownMenus();
}
GUILayout.Space(5);
GUILayout.EndHorizontal();
}
static void DrawEditorToolDropdownMenus()
{
GenericMenu popMenu = new GenericMenu();
for (int i = 0; i < EditorToolFunctionAttributeCollector.Attributes.Count; i++)
{
var toolAttr = EditorToolFunctionAttributeCollector.Attributes[i];
popMenu.AddItem(new GUIContent(toolAttr.ToolMenuPath), false,
menuIdx => { ClickToolsSubmenu((int)menuIdx); }, i);
}
popMenu.ShowAsContext();
}
static void ClickToolsSubmenu(int menuIdx)
{
var editorTp = EditorToolFunctionAttributeCollector.Attributes[menuIdx];
if (editorTp.MethodInfo != null && editorTp.MethodInfo.IsStatic)
{
editorTp.MethodInfo.Invoke(null, null); // Invoke the static method
}
else
{
Debug.LogError("Method is not static or not found.");
}
}
}
}