拓展编辑器(十二)_Context菜单

  点击组件中设置(鼠标右键),可以弹出Context菜单,我们可以在原有菜单中拓展出新的菜单栏,代码如下所示:

using UnityEngine;
using UnityEditor;

public class Context菜单
{
    [MenuItem("CONTEXT/Transform/New Context 1")]
    public static void NewContext1(MenuCommand command)
    {
        //获取对象名
        Debug.Log(command.context.name);
    }
    [MenuItem("CONTEXT/Transform/New Context 2")]
    public static void NewContext2(MenuCommand command)
    {
        Debug.Log(command.context.name);
    }
}

  其中,[MenuItem("CONTEXT/Transform/New Context 1")]表示将新菜单扩展在Transform组件上。如果想拓展在别的组件上,例如摄像机组件,直接修改字符串中的Transform为Camera即可。如果想给所有组件都添加菜单栏,这里改成Compoment即可。代码效果如下:

  

  除此以外,以上的设置也可以应用在自己的写的脚本中。代码如下:

using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class Context菜单2 :MonoBehaviour
{
    public string contextName;
#if UNITY_EDITOR
    [MenuItem("CONTEXT/Context菜单2/New Context 1")]
    public static void NewContext2(MenuCommand command)
    {
        Context菜单2 script = (command.context as Context菜单2);
        script.contextName = "hello world!";
    }
#endif
}

  这段代码通过MenuCommand来获取脚本对象,从而访问脚本中的变量。同时使用了宏定义标签,其中UNITY_EDITOR标识这段代码只会在Editor模式下执行,发布后将会被剔除掉。效果如下:

   

  当然,我们也可以在自己的脚本中这样写。如果和系统中的菜单名称一样,还可以覆盖它。比如,这里重写了删除组件的按钮,这样就可以执行自己的一些操作了:

[ContextMenu("Remove Comconent")]
    void RemoveComponent()
    {
        Debug.Log("RemoveComponent");
        //等一帧再删除自己
        UnityEditor.EditorApplication.delayCall = delegate ()
          {
              DestroyImmediate(this);
          };
    }

  编辑模式下的代码同步时可能会有问题,比如上述DestroyImmediate(this)删除自己的代码时,会触发引擎底层的一个错误。不过我们可以使用UnityEditor.EditorApplication.delayCall来延迟一帧调用。如果大家在开发编辑器代码时发现类似问题,也可以尝试延迟一帧再执行自己的代码。

原文地址:https://www.cnblogs.com/llllllvty/p/9898411.html

时间: 2024-10-29 22:39:47

拓展编辑器(十二)_Context菜单的相关文章

Bootstrap <基础十二>下拉菜单(Dropdowns)

Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 class .dropdown 内加上下拉菜单即可.下面的实例演示了基本的下拉菜单: <!DOCTYPE html> <html> <head> <title>Bootstrap 实例 - 下拉菜单(Dropdowns)</title> <li

QT开发(二十二)——QMainWindow主窗口

QT开发(二十二)--QMainWindow主窗口 一.主窗口简介 应用程序中的主窗口是与用户进行长时间交互的顶层窗口,提供了应用程序的大部分功能,通常是应用程序启动后的第一个窗口,应用程序一般由一个主窗口和多个对话框组成. QT中直接支持主窗口,QMainWindow是QT中主窗口的基类,是继承于QWidget类的容器型组件. QMainWindow内部封装了菜单栏.工具栏.中心组件.停靠组件.状态栏等. QMainWindow内置了布局管理器,基本的组件布局如下: 二.菜单栏 QT中提供了预

GIS基础软件及操作(十二)

原文 GIS基础软件及操作(十二) 练习十二. ArcMap制图-地图版面设计 设置地图符号-各种渲染方式的使用 使用ArcMap Layout(布局)界面制作专题地图 将各种地图元素添加到地图版面中 提示:在以下练习过程中,请时常注意保存地图文档 渲染图层要素-唯一值符号 在ArcMap中新建地图文档,加载 [空间分析] 扩展模块及[空间分析工具栏] 加载图层:[省会城市.地级市驻地.主要公路.国界线.省级行政区.Hillshade_10k],将地图文档保存到Ex12下,名称为:ChinaMa

Myeclipse/STS 首次在本地部署配置一个Spring MVC 项目 (十二)

1. 在本地新创建一个文件夹 ,做为项目工作空间; 2. 用 Myeclipse 或 STS 进入该文件夹,该文件夹就成为项目的工作空间: 3. 就要进 窗口-首选项,配置: 环境默认编码: 1>. 常规下面 内容类型 .txt 文本 UTF-8 更新 2>. 常规 – 工作空间 , 文本文件编码 3>. 常规 – 编辑器 – 文本编辑器 – 拼写 配置 java JDK 为 项目需要的版本 比如 (1.7) : 配置 Myeclipse 下的 Servers 及 validation 

【WPF学习】第三十二章 执行命令

原文:[WPF学习]第三十二章 执行命令 前面章节已经对命令进行了深入分析,分析了基类和接口以及WPF提供的命令库.但尚未例举任何使用这些命令的例子. 如前所述,RoutedUICommand类没有任何硬编码的功能,而是只表达命令,为触发命令,需要有命令源(也可使用代码).为响应命令,需要有命令绑定,命令绑定将执行转发给普遍的事件处理程序. 一.命令源 命令库中的命令始终可用.触发他们的最简单的方法是将它们关联到实现了ICommandSource接口的控件,其中包括继承自ButtonBase类的

第十二周进度条

第十二周          日期  星期一   星期二   星期三   星期四   星期五   星期六   星期日  了解到的知识点 js获取当前时间 var d = new Date() var nowYear = +d.getFullYear() EF框架填充下拉菜单 var model = db.GYSAllFoods.Select(m => new{GYS = m.GYS}).Distinct();//去重很关键            foreach (var item in model

【Git入门之十二】DIY Git

[Git入门之十二]DIY Git - JackyStudio - 博客频道 - CSDN.NET Git的配置是很有学问的,如果弄懂它,将对你帮助很大. 1.用户配置 这是全局的. ? [cpp]?view plaincopy ? #设置用户名?? $Snbsp;git?config?--global?user.name?"Jacky"?? ?? #设置邮箱?? $Snbsp;[email protected]?? ? 2.设置默认编辑器 在需要输入文本信息时调用,比如之前的reba

JavaWeb之控制层整理-网上书店(二十二)

后台控制 //过滤器已经实现编码问题 String op = request.getParameter("op"); if("addCategory".equals(op)) { addCategory(request,response); } else if("showAllCategories".equals(op)) { showAllCategories(request,response); } else if("addBook

Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!