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

Posted avi9111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

以上是关于unityEditor扩展开发onGUI添加右键菜单的主要内容,如果未能解决你的问题,请参考以下文章

UnityEditor扩展开发_右键菜单很详细说明,以及优先参数的一张图

UnityEditor扩展-右键拷贝资源路径到系统剪贴板

win7右键菜单发送到选项,怎么添加二级菜单?

Delphi -- 创建 桌面发送到...快速启动栏开始菜单程序菜单右键菜 单

UnityEditor

UnityEditor扩展开发删除missing script