码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-11-03 00:02:51      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:com   app   item   str   data-   form   unit   div   img   

  点击组件中设置(鼠标右键),可以弹出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来延迟一帧调用。如果大家在开发编辑器代码时发现类似问题,也可以尝试延迟一帧再执行自己的代码。

 

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

标签:com   app   item   str   data-   form   unit   div   img   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!