2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏

文章目录

  • 1 特殊文件夹 Editor
  • 2 在 Unity 菜单栏中添加自定义页签
  • 3 在 Hierarchy 窗口中添加自定义页签
  • 4 在 Project 窗口中添加自定义页签
  • 5 在菜单栏的 Component 菜单添加脚本
  • 6 在 Inspector 为脚本右键添加菜单
  • 7 加入快捷键
  • 8 小结

1 特殊文件夹 Editor

​ Editor 文件夹是 Unity 中的特殊文件夹,Unity 中所有编辑器相关的脚本都需要放置在其中,其相关的命名空间为 UnityEditor。

​ 使用命名空间 UnityEditor 的脚本最终不能被 Unity 打包,需要将这些脚本放置到 Editor 文件夹中,避免打包时报错。

image-20240208224523481

2 在 Unity 菜单栏中添加自定义页签

  • 命名空间:UnityEditor
  • 特性:MenuItem
  • 用法:在静态函数前加上 [MenuItem("页签/一级选项/二级选项/....")]
  • 作用:当在菜单栏点击该页签时,将执行静态函数中逻辑。
  • 注意:
    1. 不用在意继承对象。
    2. 斜杠必须是 /
public class Lesson1
{[MenuItem("Unity编辑器拓展/Lesson1/TestFun")]private static void TestFun(){Debug.Log("TestFun");}
}
image-20240208224442700

3 在 Hierarchy 窗口中添加自定义页签

  • 命名空间:UnityEditor

  • 特性:MenuItem

  • 用法:在静态函数前加上,并且页签命名放入 GameObject 路径。

    [MenuItem("GameObject/页签/一级选项/二级选项/....")]

  • 注意:

    1. 不用在意继承对象。
    2. 斜杠必须是 /
    3. 在菜单栏的 GameObject 中也会出现对应选项。
[MenuItem("GameObject/Lesson1/TestFun2")]
private static void TestFun2()
{Debug.Log("TestFun2");
}
image-20240208225017977

4 在 Project 窗口中添加自定义页签

  • 命名空间:UnityEditor

  • 特性:MenuItem

  • 用法:在静态函数前加上,并且页签命名放入 Assets 路径。

    [MenuItem("Assets/页签/一级选项/二级选项/....")]

  • 注意:

    1. 不用在意继承对象。
    2. 斜杠必须是 /
    3. 在菜单栏的 GameObject 中也会出现对应选项。
image-20240208225001384

5 在菜单栏的 Component 菜单添加脚本

  • 命名空间:UnityEngine

  • 特性:AddComponentMenu

  • 用法:在想要通过 Component 菜单添加的脚本前加上。

    [AddComponentMenu("一级选项/二级选项/....")]

  • 注意:

    1. 脚本需要继承 MonoBehaviour 对象,且不能放在 Editor 文件夹下。
    2. 斜杠必须是 /
    3. 最后一级选项的名字可以和脚本名不一样,但是建议一致。
    4. 添加该特性的代码可以被 Unity 打包,与因为该特性所在的命名空间不为 UnityEditor。
image-20240208225910444
using UnityEngine;[AddComponentMenu("Unity编辑器拓展/添加脚本/Lesson1_Test")]
public class Lesson1_Test : MonoBehaviour
{ }
image-20240208225803399

6 在 Inspector 为脚本右键添加菜单

  • 命名空间:UnityEditor

  • 特性:MenuItem

  • 用法:在静态函数前加上
    [MenuItem("CONTEXT/脚本名/页签/一级选项/二级选项/....")]

  • 注意:

    1. 不用在意继承对象。
    2. 斜杠必须是 /
[MenuItem("CONTEXT/Lesson1_Test/Lesson1/自定义功能")]
private static void TestFun4()
{Debug.Log("TestFun4");
}
image-20240208230146286

7 加入快捷键

  • 单键:路径后 + 空格 + 下划线 + 想要的按键

  • 组合键:下划线替换为

    1. %表示 Ctrl
    2. #表示 Shift
    3. &表示 Alt
  • 其他支持的按键:

    1. LEFTRIGHT:#LEFT 表示左 Shift 按键。
    2. UPDOWNF1..F12HOMEENDPGUPPGDN
public class Lesson1
{[MenuItem("Unity编辑器拓展/Lesson1/TestFun #F1")]private static void TestFun(){Debug.Log("TestFun");}
}
image-20240208230550896

8 小结

  1. 使用 UnityEditor 命名空间的脚本必须放在 Editor 文件夹下,避免打包报错。
  2. 添加自定义页签,需要用到特性 MenuItem。
  3. 添加代码添加页签,需要用到特性 AddComponentMenu。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GEE:CART(Classification and Regression Trees)回归教程(样本点、特征添加、训练、精度、参数优化)

作者:CSDN @ _养乐多_ 对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。回归可以应用于多种场景,包括预测土壤PH值、土壤有机碳、土壤水分、碳密度、生物量、气温、海冰厚度、不透水面积百分比、植被覆盖度等。 本文将介绍在Google…

Linux network namespace 访问外网以及多命名空间通信(经典容器组网 veth pair + bridge 模式认知)

写在前面 整理K8s网络相关笔记博文内容涉及 Linux network namespace 访问外网方案 Demo实际上也就是 经典容器组网 veth pair bridge 模式理解不足小伙伴帮忙指正 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已…

docker本地目录挂载

小命令 1、查看容器详情 docker inspect 容器名称 还是以nginx为例,上篇文章我们制作了nginx静态目录的数据卷,此时查看nginx容器时会展示出来(docker inspect nginx 展示信息太多,这里只截图数据卷挂载信息)&#…

ndk-r20b 编译 boost 1.74。

ndk-r20b 编译 boost 1.74,这是 ndk-r20b 支持得最大 boost 版本,再大就没法编译支持了,本文介绍方法是完整编译,不需要完整编译请转移到github,boost for android 得开源项目。 1.74 boost ,安卓上面得版本…

bugku 1

Flask_FileUpload 文件上传 先随便传个一句话木马 看看回显 果然不符合规定 而且发现改成图片什么的都不行 查看页面源代码,发现提示 那应该就要用python命令才行 试试ls 类型要改成图片 cat /flag 好像需要密码 bp爆破 根据提示,我们先抓包 爆破 …

matlab发送串口数据,并进行串口数据头的添加,我们来看下pwm解析后并通过串口输出的效果

uintt16位的话会在上面前面加上00,16位的话一定是两个字节,一共16位的数据 如果是unint8的话就不会, 注意这里给的是13,但是现实的00 0D,这是大小端的问题,在matlanb里设置,我们就默认用这个模式…

Vue-59、Vue技术路由的props配置

路由的props配置 1、作用:让组件更方便的收到参数 routes:[{name:guanyu,path:/about,component:About},{path:/home,component:Home,children:[{path:news,component:News},{path:message,component:Message,children:[{name:xiangqing,path:detail,component:De…

C++重新入门-C++ 函数

函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常…

多重背包问题 ⅠⅡ Ⅲ

有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。 输入 第一行两个整数,N&#xf…

鸿蒙开发理论之页面和自定义组件生命周期

1、自定义组件和页面的关系 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个Entry。只有被Entry装饰的组件才可以调用页面的生命周期。自…

基于轻量级模型YOLOX-Nano的菜品识别系统

工程Gitee地址: https://gitee.com/zhong-liangtang/ncnn-android-yolox-nano 一、YOLOX简介 YOLOX是一个在2021年被旷视科技公司提出的高性能且无锚框(Anchor-free)的检测器,在YOLO系列的基础上吸收近年来目标检测学术界的最新…

【PyTorch】PyTorch中张量(Tensor)计算操作

PyTorch深度学习总结 第五章 PyTorch中张量(Tensor)计算操作 文章目录 PyTorch深度学习总结前言一、张量比较大小1、torch.allclose()2、torch.eq()和torch.equal()3、ge、gt、le、lt、ne函数4、torch.isnan() 二、基本运算1、四则运算(加减乘除)2、其他计算 前言 上文介绍了…

零基础学python之高级编程(3)---面向对象多态与封装(含有代码示例)

面向对象多态与封装 文章目录 面向对象多态与封装前言一、多态方法重写(Overriding)方法重载(Overloading)抽象基类和接口(Abstract Base Classes and Interfaces) 二、封装私有变量和私有方法属性装饰器(property) 和 getter和se…

C++自动变量和static声明静态局部变量

C中的自动变量是指在函数内部声明的变量&#xff0c;其作用域仅限于该函数。这些变量会在程序执行到其所在的代码块时被创建&#xff0c;并在代码块执行结束后被销毁。 下面是一个示例 C 代码&#xff0c;展示了如何声明和输出自动变量和整型变量&#xff1a; #include <i…

AI绘画作品的展示和变现

AI绘画作品的展示和推广技巧 如何通过AI绘画打造独特的个人IP 4.1 AI绘画作品买卖 平台一&#xff1a;抖音 抖音平台有「抖音图文扶持计划」&#xff0c;还会不定期推出图文伙伴计划、图文热点来了等&#xff0c;大家起号的时候更容易 当你的每篇作品阅读量稳定在 1W 时&…

大话设计模式——1.模板方法模式(Template Method Pattern)

定义&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 例子&#xff1a;比较重大的考试往往有A、B两套试卷&#xff0c;其中一套出现问题可以立马更换另一套。 定义基…

字符串匹配之Z函数算法和KMP算法

目录 1 介绍1.1 Z函数算法2.2 KMP算法 2 训练 1 介绍 1.1 Z函数算法 Z函数算法&#xff0c;也叫作扩展KMP算法。它用来求取文本串text和模式串pattern的匹配位置。 首先介绍lcp(s1,s2)函数&#xff0c;它表示字符串s1和字符串s2的最大公共前缀长度。那么z[i] lcp(text, tex…

寒冰姐直播的一个开场加七个流程文字版(加强版)

寒冰姐直播开场版&#xff08;非常关键&#xff0c;让系统判定您在直播中&#xff09;&#xff1a; 大家在打开抖音直播后&#xff0c;3,2,1&#xff0c;开播就要说话&#xff0c;让抖音识别到你要开播&#xff0c;因为抖音有三大识别系统&#xff0c;文字识别系统、语音识别系…

2.12.。

1、选择芯片型号——STM32F051K8 2、开启调试功能 3、配置时钟 4、配置时钟树 5、工程管理

three.js 细一万倍教程 从入门到精通(一)

目录 一、three.js开发环境搭建 1.1、使用parcel搭建开发环境 1.2、使用three.js渲染第一个场景和物体 1.3、轨道控制器查看物体 二、three.js辅助设置 2.1、添加坐标轴辅助器 2.2、设置物体移动 2.3、物体的缩放与旋转 缩放 旋转 2.4、应用requestAnimationFrame …