拓展编辑器(十七)_MenuItem菜单

  Unity编辑器使用的拓展菜单是MenuItem。当然,开发者也可以自由拓展,直接使用"/"符号区分开它的路径即可。系统上方自带的一排菜单也在大量使用这个功能。

覆盖系统菜单

  Unity编辑器中自带了很多菜单,大多数情况下可以按照它的原有菜单路径拼合集合,例如,如果需要重写创建Text按钮的功能,可以按照下面的代码执行。

using UnityEngine;
using UnityEditor;

public class 覆盖系统菜单
{

    [MenuItem("GameObject/UI/Text")]
    static void CreatNextText()
    {
        Debug.Log("CreatNewText");
    }
}

  此时点击Unity上方菜单GameObject/UI/Text 会在输出面板上输出CreatNewText.

自定义菜单

  自定义菜单可以设置路径,排序,勾选框和禁止选中状态。代码如下:

using UnityEngine;
using UnityEditor;

public class 自定义菜单 
{
    [MenuItem("Root/Test1", false, 1)]
    static void Test1()
    {

    }
    //菜单排序
    [MenuItem("Root/Test0", false, 0)]
    static void Test0()
    {
    }
    [MenuItem("Root/Test/2")]
    static void Test2()
    {

    }
    [MenuItem("Root/Test/2", true, 20)]
    static bool Test2Validation()
    {
        //false表示Root/Test/2 菜单将置灰,即不可点击
        return false;
    }
    [MenuItem("Root/Test3", false, 3)]
    static void Test3()
    {
        //勾选框中的菜单
        var menuPath = "Root/Test3";
        bool mchecked = Menu.GetChecked(menuPath);
        Menu.SetChecked(menuPath, !mchecked);
    }
}

  效果如下:

  其中菜单下方有一个下划线。在代码中设置上一个菜单的priority(优先级),一共预留了10个元素的位置,只需要peioeity+11即可,就会自动增加这个下划线效果。Menu.SetChecked()方法可以更改菜单为选中状态。

 

posted @ 2018-11-07 22:06  むふむふ  阅读(529)  评论(0编辑  收藏  举报