100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Unity 编辑器扩展菜单

Unity 编辑器扩展菜单

时间:2019-01-07 02:18:16

相关推荐

Unity 编辑器扩展菜单

Unity 编辑器扩展菜单

目录

Unity 编辑器扩展菜单一、MenuItem 特性 菜单栏扩展1.创建多级菜单2.创建可使用快捷键的菜单项3.创建可被勾选的菜单项4.检查菜单是否使用5.菜单排序6.右键菜单扩展Hierarchy 右键菜单Project 右键菜单Inspector 组件右键菜单问题:二、AddComponentMenu 特性三、ContextMenu 特性 添加组件右键菜单四、其他

一、MenuItem 特性 菜单栏扩展

MenuItem(string itemName, bool isValidateFunction, int priority) itemName:菜单名称路径 isValidateFunction:不写为false,true则点击菜单前就会调用 priority:菜单项显示排序 默认 1000

每个方法可以使用多个 MenuItem 来创建多个菜单

特殊路径:

CONTEXT: 为组件添加菜单项

Assets: 对应顶部菜单 Assets,并添加 Project 面板右键菜单

GameObject: 对应顶部菜单 GameObject,priority 值在1~49时,添加 Hierarchy 面板右键菜单

Component: 对应顶部菜单 Component,对应 Inspector 面板的 Add Component 窗口。但是不知道怎么用,用 AddComponentMenu 吧

1.创建多级菜单

[MenuItem("一级目录名/二级目录名/.../菜单名")]static void 方法名(){//实现功能}[MenuItem("Menu/menu1/menu2")]static void Menu(){Debug.Log("多级菜单");}

2.创建可使用快捷键的菜单项

在 MenuItem 的双引号菜单路径最后+空格+快捷键字符

常用快捷键

Shift : #Ctrl : %Alt : &英文字母 :_字母 (不区分大小写)

快捷键可任意组合使用

[MenuItem("Menu/menu1/menu2 %#_A")]static void Menu(){Debug.Log("快捷键");}

3.创建可被勾选的菜单项

使用 Menu 类的方法

//设置勾选状态Menu.SetChecked(string menuPath,bool isChecked)//获取勾选状态Menu.GetChecked(string menuPath)[MenuItem("Menu/menu2")]static void Menu2(){string menuPath = "Menu/menu2";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);Debug.Log("可勾选" + isChecked);}

4.检查菜单是否使用

每次点击一级菜单时 都是先走一遍验证方法

[MenuItem("菜单路径名")]static void 方法1(){}[MenuItem("菜单路径名"),true]static void 验证方法(){return bool值; //返回true 改菜单启用}[MenuItem("Menu/menu2")]static void Menu2(){string menuPath = "Menu/menu2";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);EditorPrefs.SetBool("Menu3Validate", isChecked);Debug.Log("可勾选" + isChecked);}[MenuItem("Menu/menu3")]static void Menu3(){}[MenuItem("Menu/menu3", true)]static bool Menu3Validate(){bool flag = EditorPrefs.GetBool("Menu3Validate");Menu.SetChecked("Menu/menu2", flag);return flag;}

5.菜单排序

priority 小的位置在上方 不配置默认为1000

当相邻两个菜单的 priority 值差距超过10时 就会分组 中间出现一条横线

多级菜单的 priority 按照子级里面最小的 priority 算

MenuItem(string itemName, bool isValidateFunction, int priority) [MenuItem("Menu/menu1/menu2", false, 16)][MenuItem("Menu/menu1/menu3 %#_D", false, 5)]

6.右键菜单扩展

Hierarchy 和 Project 右键扩展属于特殊的菜单栏扩展

Hierarchy 右键菜单

Hierarchy 右键菜单是菜单栏的 GameObject 菜单栏下的菜单,并且 priority 在 1~49 范围内

[MenuItem("GameObject/菜单路径名",false,1)]static void 方法名(){}

Project 右键菜单

Project 右键菜单是菜单栏的 Assets 菜单栏下的菜单

[MenuItem("Assets/菜单路径名")]static void 方法名(){}

Inspector 组件右键菜单

组件右键菜单是使用特殊路径 CONTEXT 创建的

MenuCommand 可以获取到该组件

[MenuItem("CONTEXT/组件名/菜单名")]static void 方法名(MenuCommand cmd){//组件名 t = cmd.context as 组件名;//对该组件进行操作}[MenuItem("CONTEXT/Transform/全部归0")]static void ClearTransformMenu(MenuCommand cmd){Transform t = cmd.context as Transform;t.position = Vector3.zero;t.rotation = Quaternion.identity;t.localScale = Vector3.zero;GameObject obj = new GameObject();obj.transform.parent = t.gameObject.transform;}

问题:

菜单检查 在 Hierarchy 右键菜单里面,检查没有效果,但是在顶上菜单和 Project 右侧里面可以用。

二、AddComponentMenu 特性

AddComponentMenu 直接加载类上,会自动将菜单加到 Component 下,并加在 Inspector 面板的 AddComponentMenu 里

AddComponentMenu(string menuName, int order)menuName:菜单名路径order:菜单项排序

[AddComponentMenu("自定义/UILable",1)]public class UILable : MonoBehaviour{}

三、ContextMenu 特性 添加组件右键菜单

和 [MenuItem(“CONTEXT/组件名/菜单名”)] 功能几乎一样

ContextMenu(string itemName, bool isValidateFunction, int priority)itemName:菜单名称isValidateFunction:不写为false,true则点击菜单前就会调用 priority:菜单项显示排序 默认 1000000

class 组件类名:MonoBehaviour{[ContextMenu("菜单名称")]public void 方法名(){//执行内容}}public class UILable : MonoBehaviour{[ContextMenu("菜单名称")]public void SetAddObj(){transform.position = Vector3.zero;transform.rotation = Quaternion.identity;transform.localScale = Vector3.zero;GameObject obj = new GameObject();obj.transform.parent = transform;}}

四、其他

1.清空 Unity Dubeg

static void ClearDebug(){Assembly assembly = Assembly.GetAssembly(typeof(SceneView));Type logEntries = assembly.GetType("UnityEditor.LogEntries");MethodInfo clearConsoleMethod = logEntries.GetMethod("Clear");clearConsoleMethod.Invoke(new object(), null);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。