689 字
3 分钟
Unity 编辑器扩展(2):菜单栏扩展

顶部菜单栏扩展#

Unity 默认的顶部菜单栏如下图,我们可以在这里添加自定义工具。

image-20241212110536096

使用 MenuItem 特性标记一个静态方法就可以在顶部栏添加自定义工具:

using UnityEditor;
using UnityEngine;
public class TopbarExtension
{
[MenuItem("Tool/Custom_1")]
public static void Custom_1()
{
Debug.Log("TopbarExtension : Custom_1");
}
}

等待编译完成后就可以在顶部栏看到自定义工具,点击后就会执行 Custom_1 方法:

image-20241212150031061

MenuItem 特性可以传入三个参数:

[MenuItem(string itemName, bool isValidateFunction, int priority)]
参数类型描述
itemNamestring工具在菜单中的路径
isValidateFunctionbool是否用作相同 itemName 方法的验证方法
priorityint工具在菜单中的优先级,默认值:1000

itemName 参数#

该参数接受一个 string 类型参数,用来表示工具在顶部栏中的路径,通过 ”/” 字符分割父子级。

isValidateFunction 参数#

该参数接受一个 bool 类型参数,传入 true 时表示该方法为验证方法:

  • 验证方法会在具有相同 itemName 方法之前执行
  • 验证方法必须返回 bool 才可以生效
  • 返回 false 时,itemName 对应的菜单栏选项变为不可选状态

示例代码:

using UnityEditor;
using UnityEngine;
public class TopbarExtension
{
[MenuItem("Tool/Custom_1", false)]
public static void Custom_1()
{
Debug.Log("TopbarExtension : Custom_1");
}
[MenuItem("Tool/Custom_1", true)]
public static bool Custom_2()
{
return false;
}
}

通过验证方法可以对工具执行的条件进行判断,防止在非预期的情况下运行。

priority 参数#

该参数接受一个 int 类型参数,用来决定选项在菜单栏中的排列位置:

  • 菜单列表中处于同一级的不同方法之间会比较 priority 的值
  • 值较大的选项会排在值较小的选项下面
  • 当两个选项的 priority 值相差超过 10(>=11)时,会在两个选项之间显示一条分割线

快捷键设置#

可以在 itemName 中设置方法的快捷键:

using UnityEditor;
using UnityEngine;
public class TopbarExtension
{
[MenuItem("Tool/Custom_1 %#d", false)]
public static void Custom_1()
{
Debug.Log("TopbarExtension : Custom_1");
}
[MenuItem("Tool/Custom_1 %#d", true)]
public static bool Custom_2()
{
return false;
}
}

通过空格字符区分路径文本和快捷键文本,为选项添加快捷键。例如 %#d 将被解释为 ctrl+shift+D。如果不需要特殊按键则需要以下划线开始,例如 “Tool/Custom_1 _d”。

Unity 支持的快捷键组合:

快捷键文本对应的按键
%Windows: ctrl
macOS: cmd
#shift
&alt
LEFT
RIGHT
UP
DOWN
F1..F12F1..F12
HOMEhome
ENDend
PGUPpage up
PGDNpage down

右键菜单扩展#

Hierarchy 窗口右键菜单#

Hierarchy 窗口的右键菜单对应着顶部菜单栏的 GameObject,使用 [MenuItem("GameObject/Custom_3")] 即可将方法显示在 Hierarchy 窗口的右键菜单中。

Project 窗口右键菜单#

Project 窗口的右键菜单对应着顶部菜单栏的 Assets,使用 [MenuItem("Assets/Custom_4")] 即可将方法显示在 Project 窗口的右键菜单中。

Unity 编辑器扩展(2):菜单栏扩展
https://blog.unknowncat2048.top/posts/unity-editor-extension-2/
作者
碌碌无为喵神SAMA
发布于
2024-12-16
许可协议
CC BY-NC-SA 4.0