最近在研究就 怎么样不使用MenuItem直接往Unity菜单栏添加菜单

我也不说废话,既然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的菜单,会打印一个消息

看看就会了,不做多解释,最上面的菜单是给自己测试用的,有没有都无所谓

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值