目录
- 1.MenuItem 属性
- 2.创建多级菜单
- 3.创建带快捷键的菜单
- 4.创建带快捷键的菜单
- 5.检查菜单是否使用
- 6.菜单排序
- 7.扩展右键菜单
- 7.1 Hierarchy 右键菜单
- 7.2 Project 右键菜单
- 7.3 Inspector 组件右键菜单
- 8. AddComponentMenu 特性
- 9. ContextMenu 特性 添加组件右键菜单
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("一级菜单/二级菜单上/三级菜单")]static void MenuOne(){//功能}[MenuItem("一级菜单/二级菜单下")]static void MenuTwo(){//功能}
3.创建带快捷键的菜单
- 在 MenuItem 的双引号菜单路径最后+空格+快捷键字符
- 快捷键可任意组合使用
- 英文字母 :_字母 (不区分大小写)
- 常用快捷键:
符号 | 字符 |
---|---|
% | Ctr/Command |
# | Shift |
& | Alt |
LEFT/Right/UP/DOWN | 方向键 |
F1-F2 | F功能键 |
_g | 字母g |
[MenuItem("一级菜单/二级菜单上 #_A")]static void MenuA(){Debug.Log("A");}[MenuItem("一级菜单/二级菜单中 %#_B")]static void MenuB(){Debug.Log("B");}[MenuItem("一级菜单/二级菜单下 %&_C")]static void MenuC(){Debug.Log("B");}
4.创建带快捷键的菜单
//设置勾选状态//Menu.SetChecked(string menuPath, bool isChecked)//获取勾选状态//Menu.GetChecked(string menuPath)[MenuItem("一级菜单/二级菜单上 #_A")]static void MenuA(){string menuPath = "一级菜单/二级菜单上 #_A";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中 %#_B")]static void MenuB(){string menuPath = "一级菜单/二级菜单中 %#_B";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下 %&_C")]static void MenuC(){string menuPath = "一级菜单/二级菜单下 %&_C";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}
5.检查菜单是否使用
[MenuItem("菜单路径名")]static void 方法() { }[MenuItem("菜单路径名"),true]static void 验证方法(){return bool值; //返回true 改菜单启用}
[MenuItem("一级菜单/二级菜单上")]static void MenuA(){string menuPath = "一级菜单/二级菜单上";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中")]static void MenuB(){string menuPath = "一级菜单/二级菜单中";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);EditorPrefs.SetBool("MenuCValidate", isChecked);}[MenuItem("一级菜单/二级菜单下")]static void MenuC(){string menuPath = "一级菜单/二级菜单下";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下", true)]static bool MenuCValidate(){bool flag = EditorPrefs.GetBool("MenuCValidate");Menu.SetChecked("一级菜单/二级菜单中", flag);return flag;}
6.菜单排序
- 在priority 小的位置在上方 不配置默认为1000
- 当相邻两个菜单的 priority 值差距超过10时 就会分组 中间出现一条横线
- 多级菜单的 priority 按照子级里面最小的 priority 算
[MenuItem("一级菜单/二级菜单上", false, 3)]static void MenuA(){string menuPath = "一级菜单/二级菜单上";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单中", false, 2)]static void MenuB(){string menuPath = "一级菜单/二级菜单中";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}[MenuItem("一级菜单/二级菜单下", false, 1)]static void MenuC(){string menuPath = "一级菜单/二级菜单下";bool isChecked = !Menu.GetChecked(menuPath);Menu.SetChecked(menuPath, isChecked);}
7.扩展右键菜单
7.1 Hierarchy 右键菜单
- Hierarchy 右键菜单是菜单栏的 GameObject 菜单栏下的菜单,并且 priority 在 1~49 范围内.
[MenuItem("GameObject/二级菜单", false, 1)]static void MenuA(){}
7.2 Project 右键菜单
- Project 右键菜单是菜单栏的 Assets 菜单栏下的菜单
[MenuItem("Assets/二级菜单", false, 1)]static void MenuA(){}
7.3 Inspector 组件右键菜单
- 组件右键菜单是使用特殊路径 CONTEXT 创建的
- MenuCommand 可以获取到该组件
[MenuItem("CONTEXT/组件名/菜单名")]static void 方法名(MenuCommand cmd){//组件名 t = cmd.context as 组件名;//对该组件进行操作}[MenuItem("CONTEXT/Transform/Reset功能")]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 右侧里面可以用。
8. AddComponentMenu 特性
- AddComponentMenu 直接加载类上,会自动将菜单加到 Component 下,并加在 Inspector 面板的 AddComponentMenu 里.
AddComponentMenu(string menuName, int order)
menuName:菜单名路径
order:菜单项排序
[AddComponentMenu("自定义/Test", 1)]
public class Test : MonoBehaviour
{}
9. ContextMenu 特性 添加组件右键菜单
ContextMenu(string itemName, bool isValidateFunction, int priority)
itemName:菜单名称
isValidateFunction:不写为false,true则点击菜单前就会调用
priority:菜单项显示排序 默认 1000000
[AddComponentMenu("自定义/Test", 1)]
public class Test : MonoBehaviour
{[ContextMenu("添加空物体")]public void AddGameObject(){transform.position = Vector3.zero;transform.rotation = Quaternion.identity;transform.localScale = Vector3.zero;GameObject obj = new GameObject();obj.transform.parent = transform;}
}