Unity MenuItem设置透明后消失问题求助(2022.2.20版本)
问题描述
想要将Unity中的MenuItem设置为透明(禁用)状态,但使用当前脚本后,MenuItem直接从项目列表中消失。
使用脚本
using UnityEditor; public class Example { static bool showMenu = false; [MenuItem("GameObject/MY/Test", true)] private static bool CreateEmpityMap() { return showMenu; } [MenuItem("GameObject/MY/Test", false)] private static void CreateEmpityMap(MenuCommand menuCommand) { } }
环境信息
- Unity版本:2022.2.20
当前效果
MenuItem从列表中消失
期望效果
MenuItem保持透明(禁用)状态但仍显示在列表中
解决方案
Unity中,MenuItem的验证函数返回false时会直接隐藏菜单选项。要实现禁用(灰色透明)但保留显示的效果,需改用Menu.SetEnabled方法控制菜单启用状态,而非依赖验证函数返回值。
修改后的脚本:
using UnityEditor; public class Example { static bool isMenuEnabled = false; // 验证函数始终返回true,确保菜单显示 [MenuItem("GameObject/MY/Test", true)] private static bool ValidateCreateEmptyMap() { // 动态设置菜单启用状态 Menu.SetEnabled("GameObject/MY/Test", isMenuEnabled); return true; // 返回true保证菜单不被隐藏 } [MenuItem("GameObject/MY/Test", false)] private static void CreateEmptyMap(MenuCommand menuCommand) { // 菜单点击逻辑 } }
核心说明
- 验证函数
ValidateCreateEmptyMap始终返回true,确保菜单不会被隐藏。 - 通过
Menu.SetEnabled("菜单路径", 启用状态)控制菜单是否可点击,禁用时自动变为灰色透明,匹配期望效果。 - 修改
isMenuEnabled变量的值,即可动态切换菜单的启用/禁用状态。
内容的提问来源于stack exchange,提问作者Meysam Ghorbani
相关产品推荐
相关产品推荐

