0


Unity 编辑器篇|(一)MenuItem菜单栏

目录

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(){//功能}

1

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");}
    

2

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);}

3

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;}

4
5

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.扩展右键菜单

7.1 Hierarchy 右键菜单

  • Hierarchy 右键菜单是菜单栏的 GameObject 菜单栏下的菜单,并且 priority 在 1~49 范围内.
[MenuItem("GameObject/二级菜单",false,1)]staticvoidMenuA(){}

8
9

7.2 Project 右键菜单

  • Project 右键菜单是菜单栏的 Assets 菜单栏下的菜单
[MenuItem("Assets/二级菜单",false,1)]staticvoidMenuA(){}

9

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;}

10

  • 注意:- 菜单检查 在 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;}}
标签: unity 编辑器 游戏

本文转载自: https://blog.csdn.net/backlighting2015/article/details/135442995
版权归原作者 游戏开发小Y 所有, 如有侵权,请联系我们删除。

“Unity 编辑器篇|(一)MenuItem菜单栏”的评论:

还没有评论