目录
1.MenuItem 属性
MenuItem(string itemName,bool isValidateFunction,int priority)
- itemName:菜单名称路径 - 特殊路径: - CONTEXT: 为组件添加菜单项- Assets: 对应顶部菜单 Assets,并添加 Project 面板右键菜单- GameObject: 对应顶部菜单 GameObject,priority 值在1~49时,添加 Hierarchy 面板右键菜单- Component: 对应顶部菜单 Component,对应 Inspector 面板的 Add Component 窗口。但是不知道怎么用,用 AddComponentMenu 吧
- isValidateFunction:不写为false,true则点击菜单前就会调用
- priority:菜单项显示排序 默认 1000
2.创建多级菜单
[MenuItem("一级菜单/二级菜单上/三级菜单")]staticvoidMenuOne(){//功能}[MenuItem("一级菜单/二级菜单下")]staticvoidMenuTwo(){//功能}
3.创建带快捷键的菜单
- 在 MenuItem 的双引号菜单路径最后+空格+快捷键字符
- 快捷键可任意组合使用
- 英文字母 :_字母 (不区分大小写)
- 常用快捷键:
符号字符%Ctr/Command#Shift&AltLEFT/Right/UP/DOWN方向键F1-F2F功能键_g字母g[MenuItem("一级菜单/二级菜单上 #_A")]staticvoidMenuA(){ Debug.Log("A");}[MenuItem("一级菜单/二级菜单中 %#_B")]staticvoidMenuB(){ Debug.Log("B");}[MenuItem("一级菜单/二级菜单下 %&_C")]staticvoidMenuC(){ Debug.Log("B");}
4.创建可被勾选的菜单
//设置勾选状态//Menu.SetChecked(string menuPath, bool isChecked)//获取勾选状态//Menu.GetChecked(string menuPath)[MenuItem("一级菜单/二级菜单上 #_A")]staticvoidMenuA(){string menuPath ="一级菜单/二级菜单上 #_A";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中 %#_B")]staticvoidMenuB(){string menuPath ="一级菜单/二级菜单中 %#_B";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下 %&_C")]staticvoidMenuC(){string menuPath ="一级菜单/二级菜单下 %&_C";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);}
5.检查菜单是否使用
[MenuItem("菜单路径名")]staticvoid 方法(){}[MenuItem("菜单路径名"),true]staticvoid 验证方法(){returnbool值;//返回true 改菜单启用}
[MenuItem("一级菜单/二级菜单上")]staticvoidMenuA(){string menuPath ="一级菜单/二级菜单上";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中")]staticvoidMenuB(){string menuPath ="一级菜单/二级菜单中";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
EditorPrefs.SetBool("MenuCValidate", isChecked);}[MenuItem("一级菜单/二级菜单下")]staticvoidMenuC(){string menuPath ="一级菜单/二级菜单下";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下",true)]staticboolMenuCValidate(){bool flag = EditorPrefs.GetBool("MenuCValidate");
Menu.SetChecked("一级菜单/二级菜单中", flag);return flag;}
6.菜单排序
- 在priority 小的位置在上方 不配置默认为1000
- 当相邻两个菜单的 priority 值差距超过10时 就会分组 中间出现一条横线
- 多级菜单的 priority 按照子级里面最小的 priority 算
[MenuItem("一级菜单/二级菜单上",false,3)]staticvoidMenuA(){string menuPath ="一级菜单/二级菜单上";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中",false,2)]staticvoidMenuB(){string menuPath ="一级菜单/二级菜单中";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下",false,1)]staticvoidMenuC(){string menuPath ="一级菜单/二级菜单下";bool isChecked =!Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);}
7.扩展右键菜单
7.1 Hierarchy 右键菜单
- Hierarchy 右键菜单是菜单栏的 GameObject 菜单栏下的菜单,并且 priority 在 1~49 范围内.
[MenuItem("GameObject/二级菜单",false,1)]staticvoidMenuA(){}
7.2 Project 右键菜单
- Project 右键菜单是菜单栏的 Assets 菜单栏下的菜单
[MenuItem("Assets/二级菜单",false,1)]staticvoidMenuA(){}
7.3 Inspector 组件右键菜单
- 组件右键菜单是使用特殊路径 CONTEXT 创建的
- MenuCommand 可以获取到该组件
[MenuItem("CONTEXT/组件名/菜单名")]staticvoid 方法名(MenuCommand cmd){//组件名 t = cmd.context as 组件名;//对该组件进行操作}[MenuItem("CONTEXT/Transform/Reset功能")]staticvoidClearTransformMenu(MenuCommand cmd){Transform t = cmd.context asTransform;
t.position = Vector3.zero;
t.rotation = Quaternion.identity;
t.localScale = Vector3.zero;GameObject obj =newGameObject();
obj.transform.parent = t.gameObject.transform;}
- 注意:- 菜单检查 在 Hierarchy 右键菜单里面,检查没有效果,但是在顶上菜单和 Project 右侧里面可以用。
8. AddComponentMenu 特性
- AddComponentMenu 直接加载类上,会自动将菜单加到 Component 下,并加在 Inspector 面板的 AddComponentMenu 里.
AddComponentMenu(string menuName,int order)
menuName:菜单名路径
order:菜单项排序
[AddComponentMenu("自定义/Test",1)]publicclassTest:MonoBehaviour{}
9. ContextMenu 特性 添加组件右键菜单
ContextMenu(string itemName,bool isValidateFunction,int priority)
itemName:菜单名称
isValidateFunction:不写为false,true则点击菜单前就会调用
priority:菜单项显示排序 默认 1000000
[AddComponentMenu("自定义/Test",1)]publicclassTest:MonoBehaviour{[ContextMenu("添加空物体")]publicvoidAddGameObject(){
transform.position = Vector3.zero;
transform.rotation = Quaternion.identity;
transform.localScale = Vector3.zero;GameObject obj =newGameObject();
obj.transform.parent = transform;}}
本文转载自: https://blog.csdn.net/backlighting2015/article/details/135442995
版权归原作者 游戏开发小Y 所有, 如有侵权,请联系我们删除。
版权归原作者 游戏开发小Y 所有, 如有侵权,请联系我们删除。