当前位置: 首页 > news >正文

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应用场景&#xff1a; 1、每隔一段时间执行指定的代码逻辑&#xff08;即按周期执行任务&#xff09; 2、指定时间执行指定的代码逻辑 为方便测试并查看运行效果&#xff0c;首先先建一个类并继承TimerTask&#xff0c;代码如下: package timerTest…...

MySQL安装和配置

下载官网下载mysql解压版本&#xff1a;配置环境变量下载完成后直接解压到需要放的文件夹&#xff0c;根据文件夹来配置环境变量&#xff1b;新建系统变量&#xff0c;变量名自取&#xff0c;值是MySQL的目录编辑path环境变量&#xff0c;加上MySQL的bin目录 %MYSQL_HOME%\bin配…...

openpnnp - 载入板子后,要确定板子的放置角度

文章目录openpnnp - 载入板子后,要确定板子的放置角度概述用openpnp提供的功能来确定被夹住的板子的左下角原点位置和板子的角度备注ENDopenpnnp - 载入板子后,要确定板子的放置角度 概述 设备是有夹具的, 用百分表打过, 夹具本身在Z方向的平行度是没问题的. 但是, PCB板子的…...

HCIP知识点(前三天)

复习HCIA&#xff1a; 一、TCP/IP模型&#xff0c;OSI模型 OSI 开放式系统互联参考模型 应用层 抽象语言—>编码 表示层 编码—>二进制 会话层 应用程序内部的区分地址&#xff08;无标准格式&#xff09; 传输层 TCP/UDP – 分段&#xff08;受MTU限制&#xff09;、端…...

模板学堂丨妙用Tab组件制作多屏仪表板并实现自动轮播

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…...

C++:初识函数模板和类模板

目录 一. 泛型编程 二. 函数模板 2.1 什么是函数模板 2.2 函数模板的实例化 2.2.1 函数模板的隐式实例化 2.2.1 函数模板的显示实例化 2.3 函数模板实例化的原理 2.4 模板函数调用实例化原则 三. 类模板 3.1 什么是类模板 3.2 类模板的实例化 一. 泛型编程 泛型编程…...

3.8妇女节如何做好TikTok网红营销?

3月8日是国际妇女节&#xff0c;这一节日已经成为全球关注女性权益和平等的标志性日子&#xff0c;TikTok上话题#internationalwomensday累计播放超10亿次&#xff0c;话题#WomensDay2023累计播放量也将近300万次。 这个特别的日子为品牌提供了一个很好的营销机会。据Nox聚星了…...

使用Advanced Installer打包程序及运行环境

Advanced Installer 工具版本&#xff1a;20.1.1 设置产品信息 选中右侧【Product Details】输入产品信息 设置文件和文件夹 添加使用VS发布之后的程序文件夹 设置文件夹刷新 选中文件夹&#xff0c;右键选择属性&#xff0c;选中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)

什么是数据丢失防护 数据丢失防护 &#xff08;DLP&#xff09; 是保护数据不落入坏人之手的做法。如今&#xff0c;数据传输的主要问题是使大量数据容易受到未经授权的传输。通过设置足够的安全边界&#xff0c;您可以控制数据在网络中的移动。由于您的数据非常有价值&#x…...

不考虑分配与合并情况下,GO实现GCMarkSweep(标记清楚算法)

观前提醒 熟悉涉及到GC的最基本概念到底什么意思&#xff08;《垃圾回收的算法与实现》&#xff09;我用go实现&#xff08;因为其他的都忘了&#xff0c;(╬◣д◢)&#xff91;&#xff77;&#xff70;!!&#xff09; 源码地址&#xff08;你的点赞&#xff0c;是我开源的…...

利用HGT聚类单细胞多组学数据并推理生物网络

单细胞多组学数据允许同时对多种组学数据进行定量分析&#xff0c;以捕捉复杂的分子机制和细胞异质性。然而现有的工具不能有效地推断不同细胞类型的活性生物网络以及这些网络对外部刺激的反应。 来自&#xff1a;Single-cell biological network inference using a heterogen…...

杂记——18.VSCode的下载及使用

这篇文章&#xff0c;我们来讲一下VSCode&#xff0c;讲一下如何下载及使用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机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...