我也不说废话,既然Unity自己可以往菜单栏添加菜单栏,那么他就一定有代码逻辑是做这个操作的
所以直接去看源码UnityGitHub源码
直接得出结论,可以有,代码如下
using System;
using System.Reflection;
using UnityEditor;
using UnityEngine;
public static class ConsoleUtility
{
private static int layoutMenuItemPriority = 1;
private static Action m_Method;
[MenuItem("Test/添加自定义菜单栏")]
public static void ClearConsole()
{
DelayReloadCustomLayout();
}
[InitializeOnLoadMethod]
public static void LoadAfterCompile()
{
EditorApplication.update -= DelayReloadCustomLayout;
EditorApplication.update += DelayReloadCustomLayout;
//DelayReloadCustomLayout();
}
public static void DelayReloadCustomLayout()
{
EditorApplication.update -= DelayReloadCustomLayout;
//添加菜单栏的Unity 内部类
var menuType = typeof(Menu);
var addRemove = menuType.GetMethod("RemoveMenuItem", BindingFlags.Static | BindingFlags.NonPublic);
if (addRemove != null)
{
addRemove.Invoke(null, new object[] { "Window/Custom"});
}
m_Method = () =>
{
Debug.Log("按钮测试");
};
//直接代码添加菜单的方法
var addMenuItemMethod = menuType.GetMethod("AddMenuItem", BindingFlags.Static | BindingFlags.NonPublic);
if (addMenuItemMethod != null)
{
addMenuItemMethod.Invoke(null, new object[] { "Assets/Custom/Custom1", "", false, layoutMenuItemPriority++, m_Method, null});
}
//添加完记得一定要刷新一下
var editorUtilityType = typeof(EditorUtility);
var updateAllMenusMethod = editorUtilityType.GetMethod("Internal_UpdateAllMenus", BindingFlags.Static | BindingFlags.NonPublic);
if (updateAllMenusMethod != null)
{
updateAllMenusMethod.Invoke(null, null);
}
}
}
啥也不多说,自己看代码,直接复制进Unity Project右键就会多出来一个Custom/Custom1的菜单,会打印一个消息
看看就会了,不做多解释,最上面的菜单是给自己测试用的,有没有都无所谓