Unity中如何让MenuItem优先级修改立即生效?
一、无需重启,立即刷新菜单优先级
修改MenuItem优先级后,无需重启编辑器,调用Unity编辑器内置的EditorApplication.RepaintMenuBar()方法即可强制刷新菜单栏,让优先级变更立即生效。
你可以创建一个简单的编辑器工具脚本(放在项目的Editor文件夹下),快速触发菜单刷新:
using UnityEditor; public static class MenuRefreshTool { [MenuItem("Tools/Refresh Menu Bar")] public static void RefreshMenuBar() { EditorApplication.RepaintMenuBar(); } }
添加完成后,在编辑器顶部菜单栏点击Tools > Refresh Menu Bar,就能立刻看到菜单顺序根据新的优先级重新排列。
二、模拟编辑器重启的脚本
如果需要模拟编辑器重启(比如除了菜单问题还有其他需要重启才能生效的变更),Unity没有直接的重启API,但可以通过重新打开当前项目实现类似效果。同样创建一个编辑器脚本(放在Editor文件夹下):
using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; public static class EditorRestartTool { [MenuItem("Tools/Restart Editor")] public static void RestartEditor() { // 先提示保存修改的场景和项目 if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { // 获取项目根目录路径 string projectRoot = Application.dataPath.Replace("/Assets", ""); // 重新打开当前项目 EditorApplication.OpenProject(projectRoot); // 关闭当前编辑器进程 EditorApplication.Exit(0); } } }
点击Tools > Restart Editor后,编辑器会先询问是否保存未修改的内容,之后自动关闭并重新打开当前项目,达到模拟重启的效果。
注意事项
- 所有编辑器脚本必须放在项目的
Editor文件夹内,否则无法被Unity编辑器识别。 RepaintMenuBar()仅适用于菜单刷新场景,是解决MenuItem优先级不生效的最优方案,比重启编辑器高效得多。
内容的提问来源于stack exchange,提问作者AdmiralOrange
相关产品推荐
相关产品推荐

