unityEditor扩展开发onGUI添加右键菜单

自定义扩展右键菜单Menu代码

非传统的menutools或者在Inspector右键

骑士,inspector右键也挺好用的,挺有用的

但,最近在做热更模块,基于GF框架 

这个界面有一些按钮,几乎没有位置添加了,所以临时想在这个界面做右键

所以,需要创建,自定义右键菜单

在,网上找到这样的代码,应该能用

void OnGUI(){
                    GUILayout.Space(5f);
                    EditorGUILayout.LabelField(Utility.Text.Format("Resource List ({0})", m_Controller.ResourceCount), EditorStyles.boldLabel);
                    // 右键点击事件 //
                    var eve = Event.current;
                    var contentRect = new Rect(10, 10, 100, 100);
                    if (eve.type == EventType.ContextClick)
                    {
                        Debug.LogError("contentClick");//在onGUI界面的任何位置,右键都会触发 EventType.ContextClick
                    }
                    //

右键触发事件,+GenericMenu 还算简单,难就难在如何定位点击区域,和格努单个item的不同,而显示不同menu

当然,我暂时也没想到好方法

最终,封装了一下简单的代码:

//只需要在onGUI()调用即可得到右键鼠标的菜单显示
void OnGUI(){
    //....
    OnGUIRightClick()
}       
 void OnGUIRightClick()
        {
            var eve = Event.current;
            var contentRect = new Rect(10, 10, 100, 100);
            if (eve.type == EventType.ContextClick)
            {
                //Debug.LogError("contentClick");//在onGUI界面的任何位置,右键都会触发 EventType.ContextClick
                GenericMenu menu = new GenericMenu();
                menu.AddItem(new GUIContent("清除所有-已有"),false,OnGUIRightItemClick,"item 1");
                menu.AddItem(new GUIContent("22222222"),false,OnGUIRightItemClickEmpty,"item 2");
                menu.ShowAsContext();
                eve.Use();
            }
        }
        /// <summary>
        /// 清除“别的项目”的遗留Resources
        /// </summary>
        /// <param name="sender"></param>
        void OnGUIRightItemClick(object sender)
        {
            if (m_Controller.ResourceCount == 0)
            {
                EditorUtility.DisplayDialog("", "当前 Res 为空,无需清除", "Ok");
                return;
            }

            if (EditorUtility.DisplayDialog("", "不可还原,确认Ok?", "Ok", "Cancel"))
            {
                var allRes = m_Controller.GetResources();
                for (int i = m_Controller.ResourceCount - 1; i >= 0; i--)
                {
                  
                    var done = m_Controller.RemoveResource(allRes[i].Name, allRes[i].Variant);
                    if (done)
                    {
                        ChangeSelectedResource(null);
                        RefreshResourceTree();
                        m_Controller.Save();
                    }

                    Debug.LogError("RemoveResource();" + i +" done?" + done);
                }
            }
        }

        void OnGUIRightItemClickEmpty(object sender)
        {
            EditorUtility.DisplayDialog("", "暂时没有功能 222222222","Ok");
        }

附加

几个Unity快捷键:

「unity技巧」快捷键_浮动指针的博客-CSDN博客_unity暂停快捷键

不但官方的界面能用,自定义扩展的GUI界面也是同样受用快捷键(因为都是用了官方底层API)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值