利用GenericMenu创建上下文菜单或下拉菜单

使用GenericMenu 创建自定义上下文菜单和下拉菜单丰富自己的编辑器功能。
在这里插入图片描述

GenericMenu 介绍

变量

allowDuplicateNames

允许菜单具有多个同名的菜单项。

公共函数

AddDisabledItem

向菜单添加已禁用的项。

AddItem

向菜单添加一个项。

AddSeparator

向菜单添加一个分隔符项。

  • 这个就是一条分割线。
  • 注意添加的时机觉得分割线位置。
  • 多级菜单分割线要带对应路径,如"Root1/"

DropDown

在给定屏幕矩形中显示菜单。

  • 这里使用的时Rect默认size用Vector3.zero也就是自己自适应。

GetItemCount

获取菜单中的项数。

  • AddSeparator也算计数项

ShowAsContext

显示菜单

  • 这里使用的时鼠标位置。如果要是有指定位置用DropDown

GenericMenu 使用

创建一级菜单

GenericMenu genericMenu = new GenericMenu();
//当前选中的按钮
genericMenu.AddItem(new GUIContent("Item1", ""), true, () => { });
//当前未选中的按钮,传递用户参数,值类型有拆装箱消耗
genericMenu.AddItem(new GUIContent("Item2", ""), false, (param) => { },1);
//当前未选中的按钮
genericMenu.AddItem(new GUIContent("Item3", ""), false, () => { });
//由于传递的方法是null默认不可选
genericMenu.AddItem(new GUIContent("Item4", ""), true,null);
///添加个分隔符
genericMenu.AddSeparator("");
//添加一个不可选项
genericMenu.AddDisabledItem(new GUIContent("Item5", ""));
genericMenu.ShowAsContext();

创建多级菜单

  • 多级菜单的规则就是采用"/"进行分割。
GenericMenu genericMenu = new GenericMenu();
genericMenu.AddItem(new GUIContent("Root1/Item1", ""), true, () => { });
genericMenu.AddItem(new GUIContent("Root1/Item2", ""), false, () => { });
///添加个分隔符
genericMenu.AddSeparator("");
//当前未选中的按钮
genericMenu.AddItem(new GUIContent("Root2/Item3", ""), false, () => { });
///添加个分隔符在Root2里,这里一定注意位置
genericMenu.AddSeparator("Root2/");
genericMenu.AddItem(new GUIContent("Root2/Item4", ""), false,null);
genericMenu.ShowAsContext();

GenericMenu 优化

如果在意编辑器GC

  • 一种可以相同菜单的new 个全局,触发时对应参数缓存下来。
currentMenuTestFunctionElement = testFunctionElements[i];
if (elementGenericMenu == null)
{
    elementGenericMenu = new GenericMenu();
    elementGenericMenu.AddItem(new GUIContent(MENU_IMPORT, ""), false, ImportParam);
    elementGenericMenu.AddItem(new GUIContent(MENU_EXPORT, ""), false, ExportParam);
}
elementGenericMenu.ShowAsContext();
  • 另一种根据GenericMenu 制作一个新的GenericMenuUtility,核心代码如下:
internal void DropDown(Rect position, bool shouldDiscardMenuOnSecondClick)
{
    string[] array = new string[m_MenuItems.Count];
    bool[] array2 = new bool[m_MenuItems.Count];
    ArrayList arrayList = new ArrayList();
    bool[] array3 = new bool[m_MenuItems.Count];
    for (int i = 0; i < m_MenuItems.Count; i++)
    {
        MenuItem menuItem = m_MenuItems[i];
        array[i] = menuItem.content.text;
        array2[i] = menuItem.func != null || menuItem.func2 != null;
        array3[i] = menuItem.separator;
        if (menuItem.on)
        {
            arrayList.Add(i);
        }
    }
    EditorUtility.DisplayCustomMenuWithSeparators(position, array, array2, array3, (int[])arrayList.ToArray(typeof(int)), CatchMenu, null, showHotkey: true, allowDuplicateNames, shouldDiscardMenuOnSecondClick);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/180228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优化器的选择

优化器使用SDG和Adam的loss也不同 每个文件夹大概包含的图片&#xff1a; 在这种数量级下的图像分类优先选择SDG。

使用原生js通过ajax实现服务器渲染的简单代码和个人改进

文章目录 前文提要代码实现主要参考服务器渲染实现逻辑网页呈现效果 代码分段讲解提要html的body部分css部分js部分xhr.open函数AJAX-onreadystatechange事件function函数简写方法附件功能&#xff1a;选中行 高亮 代码全文 前文提要 本文仅做个人学习记录&#xff0c;如有错误…

数字化转型过程中面临最大的问题是什么?如何借助数字化工具实现快速转型?

在科技快速发展的时代&#xff0c;数字化转型已经成为企业的重要战略。当企业努力适应数字化时代并取得成功时&#xff0c;他们可能会面临各种必须有效应对的挑战。   数字化转型不仅仅是将新技术应用到企业的运营中&#xff0c;还需要对企业的运营方式、与客户的互动方式和价…

多篇论文介绍-可变形卷积

01 具有双层路由注意力的 YOLOv8 道路场景目标检测方法 01 摘要: 随着机动车的数量不断增加&#xff0c;道路交通环境变得更复杂&#xff0c;尤其是光照变化以及复杂背景都会干扰目标检测算法的准确性和精度&#xff0c;同时道路场景下多变形态的目标也会给检测任务造成干扰&am…

计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用。随着遥感技术和卫星图像获取能力的快速发展&#xff0c;卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一…

使用Python的turtle模块创建一幅哆啦A梦

1.1引言&#xff1a; 在Python中&#xff0c;turtle模块是一个非常有趣且强大的工具&#xff0c;它允许我们以一个可视化和互动的方式学习编程。通过调用各种命令&#xff0c;我们可以引导turtle画出一个指定的图形。在本博客中&#xff0c;我们将使用turtle模块来绘制一幅哆啦…

UML建模图文详解教程01——Enterprise Architect安装与使用

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方网站&#xff1a;https://www.sparxsystems.cn/products/ea/&#xff1b;图示如下&#xff1a; Enterprise Architect是一个全功能的、基于…

IDEA中注释快捷键及模板

单行注释 将光标放置于要注释所在行&#xff0c;使用 Ctrl /&#xff0c; 添加行注释&#xff0c;再次使用&#xff0c;去掉行注释 若需要将多行进行单行注释&#xff0c;只需要选中要注释的多行&#xff0c;然后使用 Ctrl /&#xff0c; 添加行注释&#xff0c;再次使用&a…

【Linux】权限理解【文件权限以及目录权限详解、以及umsk程序掩码知识详解】

权限理解 一、Linux权限的概念二、su [用户名] &#xff1a; 切换用户三、Linux权限管理文件&#xff08;一&#xff09;文件访问者的分类&#xff08;人&#xff09;&#xff08;二&#xff09;文件类型和访问权限&#xff08;事物属性&#xff09;&#xff08;1&#xff09;第…

【开源】基于JAVA的在线课程教学系统

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…

tp8 使用rabbitMQ

php8.0 使用 rabbitmq 要使用 3.6版本以上的&#xff0c; 并且还要开启 php.ini中的 socket 扩展 php think make:command SimpleMQProduce //创建一个生产者命令行 php think make:command SimpleMQConsumer //创建一个消费者命令行 生产者代码 <?php declare (strict_ty…

SpringBoot:异步任务基础与源码剖析

官网文档&#xff1a;How To Do Async in Spring | Baeldung。 Async注解 Spring框架基于Async注解提供了对异步执行流程的支持。 最简单的例子是&#xff1a;使用Async注解修饰一个方法&#xff0c;那么这个方法将在一个单独的线程中被执行&#xff0c;即&#xff1a;从同步执…

【无标题】文本超过一行隐藏,鼠标经过显示提示框

创建一个组件专门用来出来文字的 <template><div class"tooltip-wrap"><el-tooltipref"tlp":content"text"effect"dark":disabled"!tooltipFlag":placement"placement"popper-class"tooltip…

centos查看空间使用情况

查看磁盘使用空间 df -h 查看该目录下其他目录的大小 du -sh *

基于Python实现的一个命令行文本计数统计程序,可统计纯英文txt文本中的字符数,单词数,句子数,Python文件行数

项目简介 这是一个用 Python 编写的命令行文本计数统计程序。 基础功能&#xff1a;能正确统计导入的 纯英文txt文本 中的 字符数&#xff0c;单词数&#xff0c;句子数。扩展功能&#xff1a;能正确统计导入的 Python 文件中的代码行数&#xff0c;注释行数&#xff0c;空白…

pip安装python包到指定python版本下

python -m pip install 包名1.命令行进入到指定python安装目录。比如我电脑上有python3.8也有python3.9。准备给python3.9安装指定的包

nginx国密ssl测试

文章目录 文件准备编译部署nginx申请国密数字证书配置证书并测试 文件准备 下载文件并上传到服务器&#xff0c;这里使用centos 7.8 本文涉及的程序文件已打包可以直接下载。 点击下载 下载国密版openssl https://www.gmssl.cn/gmssl/index.jsp 下载稳定版nginx http://n…

【Python】tensorboard实时查看模型训练过程的方法示例

本文对tensorboard实时查看模型训练过程的方法进行实例详解&#xff0c;以帮助大家理解和使用。 步骤1&#xff1a;查看训练过程保存的文件中是否有这个文件&#xff0c;红框内的。 步骤2&#xff1a;如果有&#xff0c;则打开终端&#xff0c;激活安装过tensorboard的环境。…

20231122给RK3399的挖掘机开发板适配Android12

20231122给RK3399的挖掘机开发板适配Android12 2023/11/22 9:30 主要步骤&#xff1a; rootrootrootroot-X99-Turbo:~$ tar --use-compress-programpigz -xvpf rk356x_android12_220722.tgz rootrootrootroot-X99-Turbo:~$ cd rk_android12_220722/ rootrootrootroot-X99-Tur…

C++ 标准模板库:容器

1. list 容器 1.1 初始化&#xff0c;获取读取 #include <iostream> #include<list>using namespace std;void printList(const list<int>&L){for(list<int>::const_iterator it L.begin(); it ! L.end(); it){cout << *it <<"…