MenuItem是用于“在Unity引擎顶部工具栏处添加菜单栏及组件的自定义菜单”的功能。点击对应的按钮触发执行不同的事情,当然也可以根据不同情况控制该菜单按钮能不能点击。

创建菜单(MenuItem)
- 引用命名空间UnityEditor
- 给方法添加标记
- 方法必须为静态方法
MenuItem有三个重载方法如下:
1 | MenuItem(string itemName) |
菜单的路径和名字(itemName)
菜单按钮出现的位置可以根据itemName设置的路径来控制,从路径的第一级目录到倒数第二级都是目录,最后一级为按钮。如下面方法对应菜单图:
1 | [] |

通过更改一级目录可以实现在Hierarchy或Project或Inspector面板的菜单如下表所示:
| 路径 | 描述 | 备注 |
|---|---|---|
| GameObject/ | Hierarchy窗口鼠标右击菜单 | 优先级设置为1-10 |
| Assets/ | Project窗口右击菜单 | |
| CONTEXT/ | Inspector窗户右击菜单 |
1 | [] |
是否启用(isValidateFunction)
用来检测是否可以执行这个菜单。该方法需返回bool类型:
示例如下:
1 | [] |
菜单显示优先级
通常情况下自上而下排序,优先级默认都为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 |
创建菜单(ContextMenu,ContextMenuItem)
选择游戏物体与操作
操作当前选中的游戏物体
1 | [] |
获取当前选中的GameObject
1 | // 获取单个 |