itemName | itemName 表示菜单项,类似于路径名。例如,菜单项可以是 "GameObject/Do Something" 。 |
isValidateFunction | 如果 isValidateFunction 为 true,则表示这是一个验证函数,在调用具有相同 itemName 的菜单函数之前会被调用。 |
priority | 在菜单中显示菜单项的顺序。如果菜单项的优先级值大于或等于其前一个项目的优先级值加 10,则菜单中这两个菜单项之间会用分隔线隔开。 |
创建一个菜单项,并在选择该菜单项时调用其后的静态函数。
MenuItem
是一个位于脚本函数之前的属性。这使得该函数出现在 Unity 菜单系统中。菜单位置由 itemName
参数指定。
isValidateFunction
用于将 MenuItem
函数设为在具有相同 itemName
参数的脚本函数之前执行的函数。第二个参数是布尔值。如果此参数设置为 true
,则表示关联函数将在第二个脚本函数执行之前被调用。接下来执行具有相同 itemName
的第二个脚本函数。
警告:只有当 isValidateFunction
设置为 false 时,才会在执行函数中考虑 priority
。当 isValidateFunction
设置为 true 以标记验证函数时,不会使用 priority
。
priority
决定了后续脚本函数在菜单系统中的排序方式。该整数值会与其他脚本函数上的值进行比较。父菜单从其第一个定义的子菜单继承其优先级值。如果整数值大于其他值,则 MenuItem
脚本函数将放置在列表底部。 priority
的值也可用于将脚本函数列表管理成组。本页后面的示例将对此功能进行更详细的说明。
对于 iconResource
参数,可以使用包含文件和扩展名的完整项目路径,或者如果图标位于 Editor 资源中,则只需使用图标名称。
以下示例代码将三个菜单项及其对应的函数添加到名为“Example”的菜单中:Example2
(优先级 100)、Example1
(优先级 101),然后是 Example3
(优先级 112)。在菜单中,分隔线将 Example3
与其他两个菜单项隔开,因为 Example3
的优先级值比 Example1
大 10 或更多。
// Add menu item Example1 into a new menu called Example. [MenuItem("Example/Example1", false, 101)] public static void Example1() { Debug.Log("Example/Example1"); } // Add Example2 to the Example menu. Example2 has a priority lower than Example1, so it is added before Example1 in the menu. [MenuItem("Example/Example2", false, 100)] public static void Example2() { Debug.Log("Example/Example2"); } // Example3 has a priority of 112, which is 11 more than Example1. // This creates a divider between the two in the menu. [MenuItem("Example/Example3", false, 112)] public static void Example3() { Debug.Log("Example/Example3"); }
以下示例包含验证函数。不要在验证函数的属性上使用 priority
参数。
// The Example/SelectionCount menu item is enabled only when you select at least one object. [MenuItem("Example/SelectionCount", true)] public static bool SelectionCountValidation() { return Selection.count > 0; } // The actual function that is called if the active menu item is selected. [MenuItem("Example/SelectionCount", false, 200)] public static void SelectionCountAction() { Debug.Log($"The selection contains {Selection.count} element(s)"); }