MenuItem
是用于“在Unity引擎顶部工具栏处添加菜单栏及组件的自定义菜单”的功能。点击对应的按钮触发执行不同的事情,当然也可以根据不同情况控制该菜单按钮能不能点击。
引用命名空间UnityEditor
给方法添加标记
方法必须为静态方法
MenuItem有三个重载方法如下:
1 2 3 MenuItem(string itemName) MenuItem(string itemName, bool isValidateFunction); MenuItem(string itemName, bool isValidateFunction, int priority)
菜单的路径和名字(itemName) 菜单按钮出现的位置可以根据itemName设置的路径来控制,从路径的第一级目录到倒数第二级都是目录,最后一级为按钮。如下面方法对应菜单图:
1 2 3 4 5 [MenuItem("Test/Test1/Test2/DoTestAction" ) ] static void DoTest (){ Debug.Log("do it" ); }
通过更改一级目录可以实现在Hierarchy或Project或Inspector面板的菜单如下表所示:
路径
描述
备注
GameObject/
Hierarchy窗口鼠标右击菜单
优先级设置为1-10
Assets/
Project窗口右击菜单
CONTEXT/
Inspector窗户右击菜单
1 2 3 4 5 6 7 8 [MenuItem("GameObject/拓展工具1" ) ] static void MyItemMenu1 () {}[MenuItem("Assets/工具1" ) ] static void MyItemMenu1 () {...}[MenuItem("CONTEXT/工具1" ) ] static void MyItemMenu1 () {...}
是否启用(isValidateFunction) 用来检测是否可以执行这个菜单。该方法需返回bool类型: 示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 [MenuItem("Test/Test1/Test2/DoTestAction" ) ] static void DoTest (){ Debug.Log("do it" ); } [MenuItem("Test/Test1/Test2/DoTestAction" ,true) ] static bool Check (){ return false ; }
菜单显示优先级 通常情况下自上而下排序,优先级默认都为1000,更改优先级就可进行排序(Tips:相邻两个优先级相差大于11后会显示一条分割线 )
给菜单添加快捷键 字符对应热键表
字符
热键
%
win(ctrl),Mac(command)
#
shift
&
Win(alt),Mac(option)
F1-F12
F1-F12
KP0-KP9
0-9
KP+/KP-/KP*/KP=
+/-/*/=
_a
字母a
Unity编辑器拓展-Inspector
选择游戏物体与操作 操作当前选中的游戏物体 1 2 3 4 5 6 [MenuItem("CONTEXT/Camera/绿色背景" ) ] static void MyItemMenu1 (MenuCommand cmd ){ Camera camera = cmd.context as Camera; camera.backgroundColor = Color.green; }
获取当前选中的GameObject 1 2 3 4 5 var obj = Selection.activeGameObject;var objs = Selection.gameObjects