添加方法到相应的菜单栏
using UnityEngine;
using UnityEditor;
public class Tools {
[MenuItem("Tools/Test")]//通过MenuItem[“路径”]添加到相应菜单栏
static void Test() {//编辑器类的方法必需是static修饰,方法名是唯一的。
Debug.Log("Test");
}
}
编辑器中的分组
[MenuItem("Tools/Show Info",false,1)]
//其中有三个参数,第一个为路径,第二个为是否启用菜单项,第三个为优先级
** 系统默认的优先级是1000
分组的条件是第三个参数相差11,这个数值是为变的,固定要相差这么多
第二个参数的使用:
//TestDeleteBool方法为验证TestDelete方法是否可以运行。
//方法名不同,第二个参数要为true,其它要保持一致辞
[MenuItem("GameObject/Test Delete", true, 10)]
static bool TestDeleteBool()
{
if (Selection.objects.Length > 0)
{
return true;
}
else
{
return false;
}
}
[MenuItem("GameObject/Test Delete", false, 10)]
static void TestDelete() {
foreach (Object o in Selection.objects)
{
Undo.DestroyObjectImmediate(o);
}
}
添加方法到组件的右键菜单栏
using UnityEngine;
using UnityEditor;
public class PlayerEditor {
[MenuItem("CONTEXT/Rigidbody/Clear")]//CONTEXT/加组件名/加按扭名
static void ClearMassAndGravity(MenuCommand cmd)
{//MenuCommand为当前操作的组件
Rigidbody rgd = cmd.context as Rigidbody;
rgd.mass = 0;//更改组件上的变量值
rgd.useGravity = false;
}
}
Selection(选择)类的应用
[MenuItem("Tools/Show Info",false,1)]
static void ShowInfo() {
Debug.Log(Selection.activeGameObject.name);//多选时只会得到第一个选择的物体(只在Hierarchy面板中有效)
}
具体参见API
撤消的类Undo
[MenuItem("GameObject/Test Delete", false, 10)]
static void TestDelete() {
foreach (Object o in Selection.objects)
{
Undo.DestroyObjectImmediate(o);//利用Undo进行删除操作是可以撤消的
}
}
给菜单添加快捷键
%代表Ctrl,#代表Shift,&代表alt
[MenuItem("Tools/Test t", false, 10)]//纯字母加字母就可以添加快捷键
[MenuItem("Tools/Test %t", false, 10)]//组合键加字母添加快捷键
关于ContextMenu和ContextMenuItem的使用
ContextMenu非UnityEditor下,直接写在非系统组件上的右键按扭。
[ContextMenu("SetColor")]//传入一个方法名
void SetColor() {
flashColour = Color.green;
}
ContextMenuItem在脚本中给变量添加右键菜单按扭
[ContextMenuItem("AddHp", "AddHp")]//第一个参数为按扭名,第二个为方法名,方法一定要存在
public int startingHealth = 100;
void AddHp()
{
startingHealth += 20;
}
创建窗口
创建窗口要继承ScriptableWizard
ScriptableWizard.DisplayWizard<Windows>("修改窗口","Change Value");//第一个参数为标题,第二个参数为按扭名称
添加检测方法
//检测Create按扭的点击,方法名必须是OnWizardCreate
void OnWizardCreate() {
Debug.Log("Done");
}