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;
    }
}

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

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

相关文章

网页内容任君采撷-右键无法复制

CSDN一年一度的博客之星评选活动已经结束,刚好点击来看看学习一下大佬们的博客。 发现绝大部分的博主对于知识的公开度都是非常高的,当然除了收费的专栏外。 其中少部分博主对自己的博文设定了一定的操作,无法直接使用博文中的内容。 现在大…

vulhub中的Apache SSI 远程命令执行漏洞

Apache SSI 远程命令执行漏洞 1.cd到ssi-rce cd /opt/vulhub/httpd/ssi-rce/ 2.执行docker-compose up -d docker-compose up -d 3.查看靶场是否开启成功 dooker ps 拉取成功了 4.访问url 这里已经执行成功了,注意这里需要加入/upload.php 5.写入一句话木马 &…

【技术科普】什么是达芬奇架构?有什么优势?

芯片架构是指芯片设计的基本结构和组织方式,用于实现各种计算、存储和通信功能。芯片架构通常包括处理器核心、内存、输入输出接口等组成部分,这些部分的设计对芯片性能和功耗有着直接的影响,世界上主流的芯片架构主要包括x86、ARM、PowerPC和…

大创项目推荐 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

Nacos实战之配置中心与注册中心详解

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言注册中心Nacos 与 Eureka 区别 安装与运行WIN版Docker 版 父工程注册中心-服务提供方微服务 pom启动类yml参考 注册中心-服务调用方微服务pomyml 参考配置类…

Avalonia学习(二十一)-自定义界面演示

今天开始继续Avalonia练习。 本节&#xff1a;自定义界面 在网上看见一个博客&#xff0c;根据需要演示一下。 前台代码 <Window xmlns"https://github.com/avaloniaui"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:vm"using:…

vulhub中的Apache HTTPD 换行解析漏洞(CVE-2017-15715)详解

Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; 1.cd到CVE-2017-15715 cd vulhub/httpd/CVE-2017-15715 2.运行docker-compose build docker-compose build 3.运行docker-compose up -d 4.查看docker-compose ps 5.访问 出现这个表示安装成功 6.漏洞复现…

​安全可靠测评结果公告(2023年第1号)

安全可靠测评主要面向计算机终端和服务器搭载的中央处理器&#xff08;CPU&#xff09;、操作系统以及数据库等基础软硬件产品&#xff0c;通过对产品及其研发单位的核心技术、安全保障、持续发展等方面开展评估&#xff0c;评定产品的安全性和可持续性&#xff0c;实现对产品研…

洛谷 P5194 [USACO05DEC] Scales S 刷题笔记

P5194 [USACO05DEC] Scales S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路参考 大佬 薛定谔的鱼 的个人中心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 维护一个前缀和数组 从后往前一个个遍历所有可能的组合 然后进行一定的剪枝 void bfs(int now,ll ma){ …

大师学SwiftUI第6章 - 声明式用户界面 Part 1

状态 在上一章&#xff0c;我们介绍了SwiftUI的主要特性&#xff0c;声明式语法。借助SwiftUI&#xff0c;我们可以按希望在屏幕上显示的方式声明视图&#xff0c;余下交由系统来创建所需的代码。但声明式语法不只用于组织视图&#xff0c;还可在应用状态发生变化时更新视图。…

sentinel入门,转载的,不记得在哪复制的了

sentinel 基本概念 开发的原因&#xff0c;需要对吞吐量&#xff08;TPS&#xff09;、QPS、并发数、响应时间&#xff08;RT&#xff09;几个概念做下了解&#xff0c;查自百度百科&#xff0c;记录如下&#xff1a; 响应时间(RT)   响应时间是指系统对请求作出响应的时间。…

第18课 移植FFmpeg和openCV到Android环境

要在Android下从事音视频开发&#xff0c;同样也绕不开ffmpegopencv&#xff0c;不管是初学者还是有一定经验的程序&#xff0c;面临的首要问题就是环境的搭建和库文件的编译配置等问题&#xff0c;特别是初学者&#xff0c;往往会在实际开发前浪费大量的时间来编译ffmpeg及ope…

neo4j图数据库的简单操作记录

知识图谱文件导出 首先停止运行sudo neo4j stop然后导出数据库 导出格式为&#xff1a; 具体命令如下sudo neo4j-admin database dump --to-path/home/ neo4j最后重启sudo neo4j start知识图谱外观修改 在网页点击节点&#xff0c;选中一个表情后点击&#xff0c;可修改其颜…

python接口自动化(八)--发送post请求的接口(详解)

1.简介 上篇介绍完发送get请求的接口&#xff0c;大家必然联想到发送post请求的接口也不会太难&#xff0c;被聪明的你又猜到了。答案是对的&#xff0c;虽然发送post请求的参考例子很简单&#xff0c;但是实际遇到的情况却是很复杂的&#xff0c;因为所有系统或者软件、网站都…

带前后端H5即时通讯聊天系统源码

带有前后端的H5即时通讯聊天系统源码。该源码是一个开源的即时通信demo&#xff0c;需要前后端配合使用。它的主要目的是为了促进学习和交流&#xff0c;并为大家提供开发即时通讯功能的思路。尽管该源码提供了许多功能&#xff0c;但仍需要进行自行开发。该项目最初的开发初衷…

社交心不死:支付宝内测兴趣社交

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 支付宝又双叒做社交了&#xff0c;这次的“兴趣社区”能成吗&#xff1f; 支付宝做社交心不死&#xff0c;近期支付宝又开始内测名为“兴趣社区”的功能。主打找同频玩伴&#xff0c;徒步、骑行、钓鱼&#xff0c…

C#高级 10 Linq操作

1.Linq操作介绍 Linq操作是C#集成的类似于数据库语言的操作&#xff0c;是通过将数据库的表名映射为类&#xff0c;把数据库的列名映射为属性。 Linq查询主要分为3类&#xff1a;Linq to object(数组、list集合) --内存里面的数据 Linq to sql(查询数据库用的) --在数据库数据…

VScode/Xshell连接学校服务器

vscode连学校服务器 1.连接atrust VPN2.Xshell连接服务器2.1创建一个自己的用户 3.xftp传文件4.vscode连接服务器4.1下载remote-ssh4.2连接服务器4.3激活conda环境4.4运行代码 5. pytorch版本不兼容解决方案 1.连接atrust VPN 如果是使用的是校园网&#xff0c;可以不连接 2…

数据权限-模型简要分析

权限管控可以通俗的理解为权力限制&#xff0c;即不同的人由于拥有不同权力&#xff0c;他所看到的、能使用的可能不一样。对应到一个应用系统&#xff0c;其实就是一个用户可能拥有不同的数据权限&#xff08;看到的&#xff09;和操作权限&#xff08;使用的&#xff09;。 …

VUE3相比VUE2升级了哪些内容

目录 一、Vue 3 、Vue 2 对比及提升项 二、 Vue 3 创建app.vue示例 三、Vue3 的setup、Vue2 的 data对比 一、Vue 3 、Vue 2 对比及提升项 性能提升&#xff1a;Vue 3 做了大量的优化工作&#xff0c;提升了运行时的性能。例如&#xff0c;在模板编译时进行的静态分析和优化…