当前位置: 首页 > 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;}
}
效果:

请添加图片描述
点击后:
请添加图片描述

http://www.lryc.cn/news/32717.html

相关文章:

  • AFR机制及流程介绍
  • 9.Hbase 部署
  • 【maven 学习记录】
  • NB-IOT宣传这么多年,这次总算用好了吧
  • sort函数对结构体|pair对组|vector容器|map排序|二维数组的第x列 的排序
  • Java定时器Timer的使用
  • MySQL安装和配置
  • openpnnp - 载入板子后,要确定板子的放置角度
  • HCIP知识点(前三天)
  • 模板学堂丨妙用Tab组件制作多屏仪表板并实现自动轮播
  • C++:初识函数模板和类模板
  • 3.8妇女节如何做好TikTok网红营销?
  • 使用Advanced Installer打包程序及运行环境
  • 华为OD机试真题Python实现【计算堆栈中的剩余数字】真题+解题思路+代码(20222023)
  • 企业文件数据泄露防护(DLP)
  • 不考虑分配与合并情况下,GO实现GCMarkSweep(标记清楚算法)
  • 利用HGT聚类单细胞多组学数据并推理生物网络
  • 杂记——18.VSCode的下载及使用
  • 【独家】华为OD机试 - 最少停车数(C 语言解题)
  • 顶级动漫IP加持之下,3A策略游戏Mechaverse如何改变GameFi
  • 一款丧心病狂的API测试工具:Apifox!
  • 【前端学习】D2-2:CSS基础
  • Flink / Scala 实战 - 19.ProcessFunction 删除 key 的上一个定时器 TimeTimer
  • MSTP基础
  • 当ChatGPT遇见stable-diffusion,你不敢相信的创意艺术之旅!
  • 一文搞定!postman接口自动化测试【附项目实战详解】
  • ctfshow【菜狗杯】wp
  • 旋转数组的几种做法
  • 创建虚拟机、添加镜像以及配置虚拟机
  • Godot Engine 4.0横空出世,Vulkan大怪兽加持,画质提升简直亮瞎眼