0.对属性进行修饰 //头文件:using UnityEngine ;using UnityEditor;
[SerializeField] //序列化,暴露在属性面板,可以编辑,但是私有,不能在脚本中类外面拿到
[HideInInspector] //在属性面板隐藏[Header("aaa")] //标题栏,上面一行显示字段
[Tooltip("bbb")] //提示字段,指向的时候显示[Space(100)] //间隔距离
[Range(0,11)] //限制范围float value1;
[InitializeOnLoadMethod] //在加载时 调用 对函数和类进行限定 函数必须是 Static
static void InitializeOnLoad()
{}
[AddComponentMenu("Delegates/Events/EventTimer")] //类前面用 可以把该脚本类 放在 Component 下。
[AddComponentMenu("Delegates/Events/EventTimer")]
public class TimerEvents : MonoBehaviour
{}
1.菜单栏拓展 [MenuItem] // 头文件:using UnityEditor;
//菜单名字(必须有子菜单), 是否是 test1 的验证函数(默认不是,即为菜单的执行函数), 优先级(默认1000,两优先级差>10,出现横线)
//Assets 下 Property 的优先级是99998,一般的菜单的优先级是1000(这个是)
//菜单名字;是否是 test1按钮 的验证函数(如果是false,则说明是按钮的执行函数,true,说明是验证函数);优先级
//如果错误的写了两个执行函数 会只执行后面的函数,前面的函数被覆盖
[MenuItem("GameObject/test1", false, 1011)]
static void test1()
{
Debug.Log("打印test1");
}
//菜单名字;是否是 test1 的验证函数 (true,说明是验证函数), 函数的返回值决定该按钮 能否按下/能否执行
[MenuItem("GameObject/test1", true)]
static bool test1_Validate()
{
return true;//根据返回值,确定是否可以执行 菜单按钮的执行函数
}
[MenuItem("GameObject/test2", false)] //必须有子菜单
static void test2()
{
Debug.Log("打印test2");
}
2.Scene视图自定义菜单
SceneView.duringSceneGui += (SceneView) =>{} // 头文件:using UnityEditor;
[InitializeOnLoadMethod] //在加载时 调用的方法
static void InitializeOnLoad()
{
//Scene视图屏幕监听事件
SceneView.duringSceneGui += (SceneView) =>
{
if (Event.current != null && Event.current.button == 1 && Event.current.type == EventType.MouseUp)
{
//Debug.Log("右键抬起");
Rect pos = new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y - 100,100,100) ;
GUIContent[] CONTENTS = new GUIContent[] {new GUIContent("test1") , new GUIContent("XFKT/aaa/test2") }; //在pos 生成 选项框GUIContent ,默认选中下标1,执行点击的回调函数,用户数据
EditorUtility.DisplayCustomMenu(pos, CONTENTS,1,(data,opt,select)=>{
Debug.LogFormat("data:{0},opt:{1},select:{2},value={3}", data, opt, select, opt[select]);
},1);
Event.current.Use();//点击之后不再传递,如果不写 会一直使用鼠标事件
}
};
}
3.快捷键设置 //注意: 带验证函数的子菜单不能添加快捷键
[MenuItem("Assets/test5 &#s", false, 99999)]
⑴特殊符号:
%-----Window的 CTRL / MacOS 的 Command
# -----SHIT
&-----ALT[MenuItem("Assets/test5 &#s", false, 99999)]
static void test5()
{
Debug.Log("按下了 ALT + SHIF + S");
}
⑵一般符号
①字母键: A B C D a b c d
②数字键: 0 1 2 3 4 5 6 7 8 9
③功能键 :F1、F2、F3 : _F1/_F2_/F3
[MenuItem("Edit/Active GameObject _F1")]
static void test6()
{
Debug.Log("按下了F1");
}
④方向键: 上、下、左、右 : _UP/_DOWN/_LEFT/_RIGHT (只能是大写)
static void test7()
{
Debug.Log("按下了 ALT + ↑");
}
[MenuItem("Assets/test8 _UP", false, 99999)]
static void test8()
{
Debug.Log("按下了 ↑");
}
*****注意*****:
除了 特殊键【CTRLE(%) SHIT(#) ALT(&)】 可以任意组合以外(最多可以用三个), 每次 一般键(字母键 数字键 功能键 方向键) 只能选择一种中的一个。
超过一种或者一个 都会导致快捷键失效。
***************
[MenuItem("Assets/test9 _%&UP", false, 99999)]
static void test9()
{
Debug.Log("按下了CTRL+ ALT + ↑");
}
4.Project视图 拓展 和菜单栏拓展一样,只是父菜单写Assets就好。Property 的优先级是99998,一般的菜单的优先级是1000
[MenuItem("Assets/test5", false, 1011)]
static void test5()
{
Debug.Log("Project视图拓展5");
}