编辑器扩展
编辑器扩展是为开发者提供自定义工具的功能,让开发者更加便利地使用编辑器开发项目,提高开发速度和开发效率。
Editor文件夹
Unity对文件夹目录的命名有一些是保留的。编辑器扩展相关的脚本放在Editor文件夹下。此文件夹需要自己创建。
这些脚本只能在编辑器下使用,不会被打包到安装包里面。
MenuItem
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class Test_MenuItem : MonoBehaviour
{
[MenuItem("MyMenuItem/ItemA")]
static void Test()
{
Debug.Log(1);
}
}
保存脚本后,可以在菜单栏中看到创建的自定义的目录“MyMenuItem/ItemA”,选择此目录,则执行“Test”方法,无需运行。
如果写的目录已经存在,则会在存在的目录下创建自定义的新子级目录。
脚本中使用MenuItem要引入命名空间“using UnityEditor;”
此脚本可不继承MonoBehaviour。
MenuItem下的函数/方法,必须是静态(static)函数。
菜单目录以“/”分隔设置层级。
设置自定义功能的快捷键:
%在Windows中表示ctrl,在macOS中表示cmd
#表示shift
&表示alt
_字母 表示单一按键,如:_a表示按下a
#字母 表示shift+字母,如:#a表示按下Shift+a
%字母 表示Ctrl+字母,如:%a表示按下Ctrl+a
&字母 表示Alt+字母,如:&a表示按下Alt+a
其他的一个键的支持情况: LEFT, RIGHT, UP, DOWN, F1 .. F12, HOME, END, PGUP, PGDN
快捷键和前面名字之间必须加入空格,否则无效
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class Test_MenuItem : MonoBehaviour
{
[MenuItem("MyMenuItem/ItemA &F1")]
static void Test()
{
Debug.Log(1);
}
}
//快捷键为:Alt+F1
通过第二个参数设置菜单有效性:
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class Test : MonoBehaviour
{
[MenuItem("MyMenuItem/Item")]
static void MyTestA()
{
Debug.Log(1);
}
[MenuItem("MyMenuItem/Item",true)]
static bool MyTestB()
{
Debug.Log(2);
return Selection.activeTransform!=null;//未选择场景中物体则为灰色不可点击,选中物体则为可以点击.
}
}
此时,MenuItem菜单为一组,由两个函数一起完成.函数名可以不一致.
两个函数都为静态函数.
第一个函数的第二个参数可以不写或为false.
第二个函数的第二个参数为true.
通过第三个参数设置菜单同级顺序:
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class Test : MonoBehaviour
{
[MenuItem("MyMenuItem/ItemA", false, 1)]
static void MyTestA()
{
Debug.Log(1);
}
[MenuItem("MyMenuItem/ItemB", false, 2)]
static void MyTestB()
{
Debug.Log(2);
}
[MenuItem("MyMenuItem/ItemC", false, 3)]
static void MyTestC()
{
Debug.Log(3);
}
}
第三个参数值越小越靠上.
默认优先级为1000.
如果想要系统提供下划线分隔,相邻两个菜单优先级要大于等于11.