Unity 编辑器篇|(一)MenuItem菜单栏

目录

  • 1.MenuItem 属性
  • 2.创建多级菜单
  • 3.创建带快捷键的菜单
  • 4.创建带快捷键的菜单
  • 5.检查菜单是否使用
  • 6.菜单排序
  • 7.扩展右键菜单
    • 7.1 Hierarchy 右键菜单
    • 7.2 Project 右键菜单
    • 7.3 Inspector 组件右键菜单
  • 8. AddComponentMenu 特性
  • 9. ContextMenu 特性 添加组件右键菜单

1.MenuItem 属性

MenuItem(string itemName, bool isValidateFunction, int priority) 
  • itemName:菜单名称路径
    • 特殊路径:
      • CONTEXT: 为组件添加菜单项
      • Assets: 对应顶部菜单 Assets,并添加 Project 面板右键菜单
      • GameObject: 对应顶部菜单 GameObject,priority 值在1~49时,添加 Hierarchy 面板右键菜单
      • Component: 对应顶部菜单 Component,对应 Inspector 面板的 Add Component 窗口。但是不知道怎么用,用 AddComponentMenu 吧
  • isValidateFunction:不写为false,true则点击菜单前就会调用
  • priority:菜单项显示排序 默认 1000

2.创建多级菜单

    [MenuItem("一级菜单/二级菜单上/三级菜单")]static void MenuOne(){//功能}[MenuItem("一级菜单/二级菜单下")]static void MenuTwo(){//功能}

1

3.创建带快捷键的菜单

  • 在 MenuItem 的双引号菜单路径最后+空格+快捷键字符
  • 快捷键可任意组合使用
  • 英文字母 :_字母 (不区分大小写)
  • 常用快捷键:
符号字符
%Ctr/Command
#Shift
&Alt
LEFT/Right/UP/DOWN方向键
F1-F2F功能键
_g字母g
 [MenuItem("一级菜单/二级菜单上 #_A")]static void MenuA(){Debug.Log("A");}[MenuItem("一级菜单/二级菜单中 %#_B")]static void MenuB(){Debug.Log("B");}[MenuItem("一级菜单/二级菜单下 %&_C")]static void MenuC(){Debug.Log("B");}

2

4.创建带快捷键的菜单

 //设置勾选状态//Menu.SetChecked(string menuPath, bool isChecked)//获取勾选状态//Menu.GetChecked(string menuPath)[MenuItem("一级菜单/二级菜单上 #_A")]static void MenuA(){string menuPath = "一级菜单/二级菜单上 #_A";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中 %#_B")]static void MenuB(){string menuPath = "一级菜单/二级菜单中 %#_B";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下 %&_C")]static void MenuC(){string menuPath = "一级菜单/二级菜单下 %&_C";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}

3

5.检查菜单是否使用

  [MenuItem("菜单路径名")]static void 方法() { }[MenuItem("菜单路径名"),true]static void 验证方法(){return bool; //返回true 改菜单启用}
   [MenuItem("一级菜单/二级菜单上")]static void MenuA(){string menuPath = "一级菜单/二级菜单上";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中")]static void MenuB(){string menuPath = "一级菜单/二级菜单中";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);EditorPrefs.SetBool("MenuCValidate", isChecked);}[MenuItem("一级菜单/二级菜单下")]static void MenuC(){string menuPath = "一级菜单/二级菜单下";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下", true)]static bool MenuCValidate(){bool flag = EditorPrefs.GetBool("MenuCValidate");Menu.SetChecked("一级菜单/二级菜单中", flag);return flag;}

4
5

6.菜单排序

  • 在priority 小的位置在上方 不配置默认为1000
  • 当相邻两个菜单的 priority 值差距超过10时 就会分组 中间出现一条横线
  • 多级菜单的 priority 按照子级里面最小的 priority 算
    [MenuItem("一级菜单/二级菜单上", false, 3)]static void MenuA(){string menuPath = "一级菜单/二级菜单上";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中", false, 2)]static void MenuB(){string menuPath = "一级菜单/二级菜单中";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下", false, 1)]static void MenuC(){string menuPath = "一级菜单/二级菜单下";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}

7

7.扩展右键菜单

7.1 Hierarchy 右键菜单

  • Hierarchy 右键菜单是菜单栏的 GameObject 菜单栏下的菜单,并且 priority 在 1~49 范围内.
    [MenuItem("GameObject/二级菜单", false, 1)]static void MenuA(){}

8
9

7.2 Project 右键菜单

  • Project 右键菜单是菜单栏的 Assets 菜单栏下的菜单
  [MenuItem("Assets/二级菜单", false, 1)]static void MenuA(){}

9

7.3 Inspector 组件右键菜单

  • 组件右键菜单是使用特殊路径 CONTEXT 创建的
  • MenuCommand 可以获取到该组件
    [MenuItem("CONTEXT/组件名/菜单名")]static void 方法名(MenuCommand cmd){//组件名 t = cmd.context as 组件名;//对该组件进行操作}[MenuItem("CONTEXT/Transform/Reset功能")]static void ClearTransformMenu(MenuCommand cmd){Transform t = cmd.context as Transform;t.position = Vector3.zero;t.rotation = Quaternion.identity;t.localScale = Vector3.zero;GameObject obj = new GameObject();obj.transform.parent = t.gameObject.transform;}

10

  • 注意:
    • 菜单检查 在 Hierarchy 右键菜单里面,检查没有效果,但是在顶上菜单和 Project 右侧里面可以用。

8. AddComponentMenu 特性

  • AddComponentMenu 直接加载类上,会自动将菜单加到 Component 下,并加在 Inspector 面板的 AddComponentMenu 里.
AddComponentMenu(string menuName, int order)
menuName:菜单名路径
order:菜单项排序
[AddComponentMenu("自定义/Test", 1)]
public class Test : MonoBehaviour
{}

9. ContextMenu 特性 添加组件右键菜单

ContextMenu(string itemName, bool isValidateFunction, int priority)
itemName:菜单名称
isValidateFunction:不写为falsetrue则点击菜单前就会调用 
priority:菜单项显示排序 默认 1000000
[AddComponentMenu("自定义/Test", 1)]
public class Test : MonoBehaviour
{[ContextMenu("添加空物体")]public void AddGameObject(){transform.position = Vector3.zero;transform.rotation = Quaternion.identity;transform.localScale = Vector3.zero;GameObject obj = new GameObject();obj.transform.parent = transform;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

护眼灯色温多少合适?盘点合适色温的护眼台灯

有了孩子,就等于同时有了软肋和铠甲,也总是在自己的能力范围内,把最好的东西给他。当孩子开始学习知识后更是如此,能力范围内最好的教育资源、最好的学习环境,以及各种与之配套的学习用具。护眼台灯在这时候就安排上了…

【leetcode】力扣热门之回文链表【简单难度】

题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 用例 输入:head [1,2,2,1] 输出:true 输入:head [1,2] 输出:f…

【Java】设计模式之保护性暂停

设计模式之保护性暂停 Guarded Suspension,这个设计模式,主要用在一个线程等待另一个线程的执行结果(发请求等待响应) 有一个结果需要从一个线程传递到另一个线程,传递只进行一次,用设计模式保护性暂停。 …

如何平衡 SEO 与思想领导力内容战略

曾几何时,SEO 是一个肮脏的词,与 "黑帽 "操作有关,他们通过操纵排名来达到邪恶的目的。现在,有些人认为这是一种炼金术的转化:锡变金,内容变客户。 实际上,这两种说法都不正确。 没…

2023检索增强生成技术(RAG)研究进展

一、前言 在过去的一两年里,人工智能领域目睹了检索增强生成技术(RAG)的迅猛发展,这种技术结合了强大的语言模型与信息检索系统,以期在复杂的问题解决和信息处理任务中提供更加精确和深入的答案。正是这种对前沿科技的…

振弦采集仪在桥梁结构监测中的应用研究

振弦采集仪在桥梁结构监测中的应用研究 振弦采集仪在桥梁结构监测中的应用研究是指利用振弦采集仪对桥梁结构进行监测和数据采集的研究。振弦采集仪是一种能够实时监测桥梁结构振动情况的设备,通过采集桥梁上的振弦传感器获取振动数据,并将数据传输到监…

【数据库分库分表思路】

一、数据切分介绍 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进…

vue+element弹窗内---下拉框定位问题解决(方法之一)

问题: 加了 :popper-append-to-body"false" 这个属性也不好用时 可以试试这个 解决: 第一步: 找到el-select标签添加(popper-class"popperClass")属性-----如下图 第二步:在css中添加如下代码即可 ::v-deep .popperClass{ top:auto !important; }

静态网页设计——个人图书馆(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1VN4y1q7cz/?vd_source5f425e0074a7f92921f53ab87712357b 源码:https://space.bilibili.co…

python总结-生成器与迭代器

生成器与迭代器 生成器生成器定义为什么要有生成器创建生成器的方式一(生成器表达式) 创建生成器的方式二(生成器函数)生成器函数的工作原理总结 迭代器概念可迭代对象和迭代器区别for循环的本质创建一个迭代器 动态添加属性和方法运行过程中给对象、类添加属性和方法types.Met…

kafka之消费者(Consumer)

1、kafka消费者消费方式 kafka 的消费者(Consumer)采用 pull 的方式主动从 broker 中拉取数据,这种不足之处会有:当 broker 中没有消息时,消费者会不断循环取数据,一直返回空数据。 2、消费者组 Consumer…

【数据结构】平衡二叉树

导语 对于二叉搜索树 而言,它的 增、 删 、 改 、 查 的时间复杂度为 O() ~ O(n) 。原因是最坏情况下,二叉搜索树会退化成 线性表 。换言之,树的高度决定了它插入、删除和查找的时间复杂度。 为了对上述缺点进一步优化,设计了一…

APM32F035有感矢量控制方案

一、先来几句废话 首先这两年公司越来越多的开始使用国产的MCU,用过GD32、AT32、APM32等等,目前稳定使用的是APM32,包括身边朋友工作室,也开始从TI、STM、NXP换成APM32。上个月有幸拿到APM32F035电路控制板,非常感谢面包板社区提供…

实战环境搭建-linux下安装tomcat

安装tomcat Index of /dist/tomcat/tomcat-9/v9.0.8/bin 下载apache-tomcat-9.0.8.tar.gz,可以使用wget; 2、将压缩包tar -zxvf apache-tomcat-9.0.8.tar.gz解压到/home/tomcat 3、修改环境变量 vi /etc/profile export JAVA_HOME=/home/java/jdk1.8.0_221 export JRE_HO…

sublime如何取消运行代码状态

sublime如何取消运行代码状态 解决方案待续、更新中 解决方案 1 顶部取消: 工具-----取消编译 这个看自己编译器sublime取消编译是否可用,可用则用 ,否则使用下面方法 2 底部栏取消–如图所示: 取消成功: 待续、更新中 ————————————————————— 以上就…

基于php应用的文件管理器eXtplorer部署网站并内网穿透远程访问

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件,是互联网最重要的应用之一,无论是…

7.数据转换、格式化、校验

日期字符串格式的表单参数,提交后转换为 Date 类型 <!-- 解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay :<form:input path="birthDay"/>Employee 类中增加日期类型属性: //关于类型转换 private Date birthDay ;数据绑定流程原理 …

Qt QWidget窗口基类

文章目录 1 QWidget介绍2 如何显示 QWidget窗口2.1 新建基于QWidget的窗口类2.2 再添加一个QWidget窗口类2.3 显示新添加的 QWidget窗口 3 常用的属性和方法3.1 窗口位置3.2 窗口大小3.3 窗口标题3.4 窗口图标3.5 资源文件 4 实例 1 QWidget介绍 Qt 中的常用控件&#xff0c;比…

什么是CDN,优势在哪里

随着互联网的普及和用户需求的多样化&#xff0c;网站的速度和稳定性已经成为影响用户体验的关键因素。CDN加速作为解决这一问题的有效手段&#xff0c;正逐渐受到业界的广泛关注。 为什么说对网站这一块起到这么关键性的作用呢&#xff1f;它的优势在哪&#xff1f; 1.提升网…

【机器学习】卷积神经网络(五)-计算机视觉应用

七、应用-计算机视觉 7.1 人脸检测 DenseBox\Femaleness-Net\MT-CNN\Cascade CNN 介绍 VJ框架的分类器级联用于卷积网络 用于人脸检测的紧凑卷积神经网络级联 问题&#xff1a;作者希望实时检测高分辨率视频流中的正面&#xff0c;由于人脸图像和背景的多样性和复杂性&#xff…