Unity编译器扩展(Advanced Editor Scripting)
Untiy编译器扩展允许我们对编译器的增加自己编写的的功能菜单栏
- MenuItem
- ContextMenu和ContextMenuItem
- ContextMenu
- ContextMenuItem
 
MenuItem
该属性允许您将菜单项添加到主菜单和检查器窗口上下文菜单。
 该属性将任何静态函数转换为菜单命令。只有静态函数可以使用该属性。
MenuItem的API地址
使用MenuItem需要的命名空间(class in UnityEditor)
using UnityEditor;
1.使用MenuItem添加菜单栏按钮 
//添加一个Do Someing的MenuItem到MyMenu的菜单栏下
//第一个参数路径采用  "菜单栏/MenuItem name"的形式,
//如果菜单栏不存才则会自动创建
[MenuItem("MyMenu/DoSomeing")]
static void DoSomeing() {Debug.Log("Doing Someing ...");
}[MenuItem("MyMenu/DoSomeing/test")]
static void DoSomeingTest() {Debug.Log("Doing Someing ...");
}
效果

2.Menuitem层级的设置
菜单栏的层级设置是第三个参数,
把是否验证的参数传入false代表这个静态不是验证函数
当相邻的两个菜单栏相差的优先级相差11时就会被分层。
官方建议我们将层级优先级设置为10,而不是默认优先级的1000
原文:请注意,对于“GameObject/Create Other” 中没有明确优先级设置且支持旧版项目的 MenuItem 来说,接收到的优先级为 10 而非默认的 1000, 我们建议使用比“Create Other”更具描述性的类别名称,并将优先级 显式设置为 10
[MenuItem("MyMenu/DoSomeing")]
static void DoSomeing() {Debug.Log("Doing Someing ...");
}[MenuItem("MyMenu/DoSoming_1",false, 21)]
static void DoSomeingTest1() {Debug.Log("Doing Someing ...");
}//多级分层
[MenuItem("MyMenu/DoSomeing/test",false , 10)]
static void DoSomeingTest() {Debug.Log("Doing Someing ...");
}
效果:

3.验证菜单项
//被验证菜单栏
//添加一个Log Select Transform Name到MyMenu菜单下
//使用验证函数来判断是否有物体被选中
//如果有物体被选中则可以点击,输出相应的内容
[MenuItem("MyMenu/Log Selected Transform Name")]
static void LogSelectTransformName() {Debug.Log("选中的的transfor物体名字是" + Selection.activeTransform.name + ".");
}//验证上述的菜单栏
[MenuItem("MyMenu/Log Selected Transform Name", true)]
static bool ValidateLogSelectedTransformName() {
//如果没有选中的物体就会返回falsereturn Selection.activeTransform != null;
}
没有选择时的效果:

4.给组件加上菜单栏
MenuCommand 用于提取MenuItem的上下文,MenuCommand对象传递到使用MenuItem属性定义的自定义菜单项函数。
context属性是上下文传递对象的内容,可以使用强制转换
格式:[Menu(“CONTEXT/组件名/菜单栏名”)]
[MenuItem("CONTEXT/Rigidbody/Double Mass")]
static void DoubleMass(MenuCommand command) {Rigidbody body =(Rigidbody)command.context;body.mass *= 2;Debug.Log("我该变了缸体的重量为"+ body.mass);
}
效果:

不支持多态,请严格拼写组件的名字

5.使用Undo注册操作,能够使用组合键 Ctrl + Z 撤销
注意:需要将注册操作放在操作生效的之前,如果你需要删除物体,那么就把Undo的代码放在删除之前
Undo的其他一些常用方法
[MenuItem("GameObject/MyCategory/Custom Game Object #G",false , 10)]
static void DoubleMas(MenuCommand command) {GameObject go = new GameObject("Custom Game Object");GameObjectUtility.SetParentAndAlign(go, command.context as GameObject);//注册操作Undo.RegisterCreatedObjectUndo(go, "Create" + go.name);Selection.activeObject = go;
}
不会做动图,效果就是按下Ctrl + Z 可以撤销,
ContextMenu和ContextMenuItem
ContextMenu
所需要的命名空间UnityEngine(class in UnityEngine)
ContextMenu的API地址
描述:
ContextMenu 属性用于向上下文菜单添加命令。
在该附加脚本的 Inspector 中,当用户选择该上下文菜单时, 将执行此函数。
这对于从该脚本自动设置场景数据非常有用。 此函数必须是非静态的。
using UnityEngine;
使用Context一定要在可挂载的脚本上(脚本要继承MonoBehaviour)
使用鼠标右键点击就能看到函数
using UnityEngine;public class ContextTesting : MonoBehaviour {[ContextMenu("Do Something")]static void DoSomething() {Debug.Log("Perform operation");}
}
效果:

ContextMenuItem
所需要的命名空间UnityEngine(class in UnityEngine / 继承自PropertyAttribute)
ContextMenuItem的API
使用该属性可将上下文菜单添加到调用命名方法的字段。
即为脚本中的属性添加菜单栏
using UnityEngine;public class ContextTesting : MonoBehaviour {[ContextMenuItem("Add Text", "Add")]public int test = 0;void Add() {test += 20;}
}效果:

 点击后:
 
相关文章:
 
Unity编译器扩展(Advanced Editor Scripting)
Untiy编译器扩展允许我们对编译器的增加自己编写的的功能菜单栏MenuItemContextMenu和ContextMenuItemContextMenuContextMenuItemMenuItem 该属性允许您将菜单项添加到主菜单和检查器窗口上下文菜单。 该属性将任何静态函数转换为菜单命令。只有静态函数可以使用该属性。 Men…...
AFR机制及流程介绍
AFR(Auto Fast Return)不符合3GPP协议标准,因此终端默认是disable状态。如果运营商有要求可以配置开启。 AFR有两种场景 2G或者3G AFR到4G4G AFR到5G3G AFR TO 4G AFR到LTE功能的作用就是终端从LTE Handover或者重定向到3G进行业务,等业务做完后能够快速回到LTE网络。...
 
9.Hbase 部署
9.Hbase部署 注意事项: 1:必须事先安装 Hadoop分布式集群,zookeeper分布式集群 2:查看版本号: hbase version1、解压文件并改名 tar -zxvf /opt/software/hbase-2.2.3-bin.tar.gz -C /usr/app/ mv hbase-2.2.3/ hba…...
 
【maven 学习记录】
maven 学习记录一、maven基础1. maven是什么2. maven的作用3. maven的下载安装4. maven仓库5. maven坐标6. 第一个maven项目 手工实现7. maven插件8. 依赖管理9. 生命周期二、maven进阶一、maven基础 1. maven是什么 maven的本质是一个项目管理工具,将项目开发和管…...
 
NB-IOT宣传这么多年,这次总算用好了吧
一、方案概述随着实体经济快速发展,石化、港口、货场、工地等区域规模日益扩大,厂区面积广阔、环境复杂、作业人员和车辆众多,如无法实时掌握工作人员状态及外来人员位置、外来车辆情况等问题,将存在非常大的安全隐患。今天小编介…...
 
sort函数对结构体|pair对组|vector容器|map排序|二维数组的第x列 的排序
目录 sort对 vector容器 sort对 vector<pair<int,int>>对组 sort对 结构体 结构体外部规定排序 结构体内部运算符重载 map容器的排序 map的键排序 map的值排序 sort对二维数组的排序 sort对 vector容器 sort()函数可以用于对vector容器进行排序。具体来…...
 
Java定时器Timer的使用
一、Timer常用方法 Timer应用场景: 1、每隔一段时间执行指定的代码逻辑(即按周期执行任务) 2、指定时间执行指定的代码逻辑 为方便测试并查看运行效果,首先先建一个类并继承TimerTask,代码如下: package timerTest…...
 
MySQL安装和配置
下载官网下载mysql解压版本:配置环境变量下载完成后直接解压到需要放的文件夹,根据文件夹来配置环境变量;新建系统变量,变量名自取,值是MySQL的目录编辑path环境变量,加上MySQL的bin目录 %MYSQL_HOME%\bin配…...
 
openpnnp - 载入板子后,要确定板子的放置角度
文章目录openpnnp - 载入板子后,要确定板子的放置角度概述用openpnp提供的功能来确定被夹住的板子的左下角原点位置和板子的角度备注ENDopenpnnp - 载入板子后,要确定板子的放置角度 概述 设备是有夹具的, 用百分表打过, 夹具本身在Z方向的平行度是没问题的. 但是, PCB板子的…...
 
HCIP知识点(前三天)
复习HCIA: 一、TCP/IP模型,OSI模型 OSI 开放式系统互联参考模型 应用层 抽象语言—>编码 表示层 编码—>二进制 会话层 应用程序内部的区分地址(无标准格式) 传输层 TCP/UDP – 分段(受MTU限制)、端…...
 
模板学堂丨妙用Tab组件制作多屏仪表板并实现自动轮播
DataEase开源数据可视化分析平台于2022年6月正式发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并…...
 
C++:初识函数模板和类模板
目录 一. 泛型编程 二. 函数模板 2.1 什么是函数模板 2.2 函数模板的实例化 2.2.1 函数模板的隐式实例化 2.2.1 函数模板的显示实例化 2.3 函数模板实例化的原理 2.4 模板函数调用实例化原则 三. 类模板 3.1 什么是类模板 3.2 类模板的实例化 一. 泛型编程 泛型编程…...
3.8妇女节如何做好TikTok网红营销?
3月8日是国际妇女节,这一节日已经成为全球关注女性权益和平等的标志性日子,TikTok上话题#internationalwomensday累计播放超10亿次,话题#WomensDay2023累计播放量也将近300万次。 这个特别的日子为品牌提供了一个很好的营销机会。据Nox聚星了…...
 
使用Advanced Installer打包程序及运行环境
Advanced Installer 工具版本:20.1.1 设置产品信息 选中右侧【Product Details】输入产品信息 设置文件和文件夹 添加使用VS发布之后的程序文件夹 设置文件夹刷新 选中文件夹,右键选择属性,选中Synchronize标签。启用“Synchronize conten…...
华为OD机试真题Python实现【计算堆栈中的剩余数字】真题+解题思路+代码(20222023)
计算堆栈中的剩余数字 题目 向一个空栈中依次存入正整数 假设入栈元素N(1<=N<=2^31-1) 按顺序依次为Nx … N4、N3、N2、N1, 当元素入栈时,如果N1=N2+...Ny(y的范围[2,x],1 <= x <= 1000) 则 N1 到 Ny 全部元素出栈,重新入栈新元素M(M=2*N1) 如依次向栈存储6、1、…...
 
企业文件数据泄露防护(DLP)
什么是数据丢失防护 数据丢失防护 (DLP) 是保护数据不落入坏人之手的做法。如今,数据传输的主要问题是使大量数据容易受到未经授权的传输。通过设置足够的安全边界,您可以控制数据在网络中的移动。由于您的数据非常有价值&#x…...
 
不考虑分配与合并情况下,GO实现GCMarkSweep(标记清楚算法)
观前提醒 熟悉涉及到GC的最基本概念到底什么意思(《垃圾回收的算法与实现》)我用go实现(因为其他的都忘了,(╬◣д◢)ムキー!!) 源码地址(你的点赞,是我开源的…...
 
利用HGT聚类单细胞多组学数据并推理生物网络
单细胞多组学数据允许同时对多种组学数据进行定量分析,以捕捉复杂的分子机制和细胞异质性。然而现有的工具不能有效地推断不同细胞类型的活性生物网络以及这些网络对外部刺激的反应。 来自:Single-cell biological network inference using a heterogen…...
 
杂记——18.VSCode的下载及使用
这篇文章,我们来讲一下VSCode,讲一下如何下载及使用VSCode 目录 1.VSCode的下载 1.1VSCode的简介 1.2VSCode的下载与安装 1.2.1下载 1.2.2安装 2.VSCode的使用 2.1界面 2.2基础设置 2.3禁用自动更新 2.3自动保存设置 2.4Vscode更换主题 2.5…...
【独家】华为OD机试 - 最少停车数(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...
 
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
 
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
 
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
 
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
 
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
