Unity引擎除了提供大部分通用的功能以外,还为开发者提供了编辑器的扩展开发接口,开发者可以编写编辑器脚本,打造适合自己的游戏辅助工具和定制的编辑器。
以前脚本开发中使用的一些API和组件类,都属于运行时类,Unity还提供了编辑器类用于编辑器的扩展开发,包括编辑器环境下使用的GUI类,编辑器工具类,编辑器操作类(例如拖放、撤销操作)等。
注意:编辑器扩展的代码必须放在“Editor”文件夹下,该文件夹下的代码在游戏运行过程中不会执行,只能在编辑器模式下操作使用。该文件夹的代码,以及其它任何资源,在打包的时候都不会包括进去。
使用MenuItem添加菜单栏按钮
默认:MenuItem("路径+按钮名") 使用默认参数,添加的按钮默认放在最下面
using UnityEditor;
using UnityEngine;
public class Tools {
[MenuItem("Tools/test")]
static void Test()
{
Debug.Log("test");
}
}
分栏:MenuItem("路径+按钮名",false,层级)
注意:第二个参数写false,第三个参数为层级,越小的越在上面。如果需要分栏效果,那么两个按钮之间至少间隔为11
using UnityEditor;
using UnityEngine;
public class Tools {
[MenuItem("Tools/test1",false,1)]
static void Test1()
{
Debug.Log("test1");
}
[MenuItem("Tools/test2",false,2)]
static void Test2()
{
Debug.Log("test2");
}
[MenuItem("Tools/test3",false,13)]
static void Test3()
{
Debug.Log("test3");
}
}
给组件的右键菜单栏添加按钮
注意:格式固定 MenuItem("CONTEXT/组件名/按钮名")
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class PlayerEditor {
[MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]// CONTEXT 组件名 按钮名
static void InitHealthAndSpeed()
{
Debug.Log("Init");
}
}
MenuCommand的使用:使用MenuCommand可以获取到当前操作的组件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class PlayerEditor {
[MenuItem("CONTEXT/PlayerHealth/InitHealthAndSpeed")]// CONTEXT 组件名 按钮名
static void InitHealthAndSpeed(MenuCommand cmd) //MenuCommand是当前正在操作的组件
{
//Debug.Log(cmd.context.GetType().FullName);
CompleteProject.PlayerHealth health = cmd.context as CompleteProject.PlayerHealth;
health.startingHealth = 200;
health.flashSpeed = 10;
}
}