当前位置: 首页 > 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机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...