"
参考链接:
0.定义
itemName表示菜单路径
isValidateFunction表示该方法是否为验证方法
priority表示菜单优先级
使用方法:
1 using UnityEditor;
2 using UnityEngine;
3
4 public class TestMenuItem
5 {
6 【MenuItem(""GameObject/Test41"", //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQxODI4MA==.html
false)】7 private static void Test41()
8 {
9 Debug.Log(""Test41"");
10 }
11 }
1.参数itemName
a.与视图的对应关系
Assets->Project视图
GameObject->Hierarchy视图
Componemt->Inspector视图的AddComponent窗口
b.快捷键设置
_w表示字母w
#w表示shift+w
%w表示ctrl+w
&w表示alt+w
直接按快捷键就能调用,支持混合,注意前面要加空格,使用如下:
【MenuItem(""GameObject/Test41 %#w"", false, 41)】
2.参数isValidateFunction
true表示该方法是该菜单项的检测方法,false表示该方法是该菜单项的执行方法,默认为false
在检测方法中,返回true表示该菜单项可以点击,否则不可以点击。如下表示选中一个东西才可以点击
1 using UnityEditor;
2 using UnityEngine;
3
4 public class TestMenuItem
5 {
6 【MenuItem(""GameObject/Test41 %#w"", true, //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQxOTYzNg==.html
41)】7 private static bool Test41ValidateFunc()
8 {
9 return Selection.activeObject != null;
10 }
11
12 【MenuItem(""GameObject/Test41 %#w"", false, 41)】
13 private static void Test41()
14 {
15 Debug.Log(""Test41"");
16 }
17 }
3.参数priority
表示优先级,越大越后,默认为1000即放最后
a.分割线
当相邻的两个菜单项优先级相差>10时,表示不同组,这时会有分割线
1 using UnityEditor;
2 using UnityEngine;
3
4 public class TestMenuItem
5 {
6 【MenuItem(""GameObject/Test30"", false, 30)】
7 private static void Test30()
8 {
9 Debug.Log(""Test30"");
10 }
11
12 【MenuItem(""GameObject/Test41"", false, 41)】
13 private static void Test41()
14 {
15 Debug.Log(""Test41"");
16 }
17 }
b.相同优先级的情况下,先定义的在前面,不会出现覆盖的情况
c.相同菜单路径的情况下,后定义的会覆盖先定义的。unity内置的菜单项同样也可以被覆盖
d.GameObject/下的菜单项优先级<50的才会显示在Hierarchy视图中
4.为组件添加菜单项
使用方法:【MenuItem(""CONTEXT/组件名/显示方法名"")】
1 using UnityEditor;
2 using UnityEngine;
3 using System.Collections.Generic;
4 using System.Text;
5
6 public class TestMenuItem
7 {
8 【MenuItem(""CONTEXT/TestEditorComponent/TestTest"")】
9 private static void TestTest(MenuCommand cmd)
10 {
11 TestEditorComponent comp = cmd.context as TestEditorComponent;
12 List traList = comp.traList;
13 StringBuilder stringBuilder = new StringBuilder();
14 for (int i = 0; i < traList.Count; i++)
15 {
16 string temp = string.Format(""{0}_{1}"", traList【i】.gameObject.name, i);
17 stringBuilder.AppendLine(temp);
18 }
19 TextEditor textEditor = new TextEditor();
20 textEditor.text = stringBuilder.ToString();
21 textEditor.OnFocus();
22 textEditor.Copy();
23 }
24 }
"