You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity Editor脚本使用MenuItem后Hierarchy右键不显示自定义选项

问题原因

Hierarchy面板右键GameObject弹出的菜单有固定的路径规则,只有挂载在GameObject/根路径下的MenuItem才会显示在该右键菜单中。你当前代码中MenuItem的路径是InteractableItem/Make InteractableItem,该路径的选项只会出现在Unity编辑器顶部的全局菜单栏,不会同步到GameObject相关的右键菜单。

替换ContextMenu无效属于特性用错场景:

  • ContextMenu特性仅用于给运行时组件的实例方法添加Inspector上下文菜单,必须写在非Editor的MonoBehaviour派生类中,仅会在选中对应组件、点击组件右上角三点菜单时显示,本身不支持Hierarchy面板的GameObject右键菜单。
  • 你的ContextMenu写在Editor类中,本身就不会被正常加载识别。
修复代码

将MenuItem路径调整为GameObject/开头即可,参考代码如下:

using UnityEditor;
using UnityEngine;

public class InteractableItemEditor
{
    // 路径以GameObject/开头,会自动同步到Hierarchy、Inspector的GameObject右键菜单
    [MenuItem("GameObject/InteractableItem/Make InteractableItem", false, 11)]
    private static void MakeInteractableItem()
    {
        foreach (GameObject o in Selection.gameObjects)
        {
            if (!o.GetComponent<InteractableItem>())
            {
                o.AddComponent<InteractableItem>();
                o.tag = "Interactable Item";
            }
        }
    }
}

注:仅用来注册MenuItem的Editor类不需要继承Editor基类,继承Editor是用来编写自定义Inspector面板的,多余继承不会影响功能但没必要。

排查补充

如果修改后仍不显示,按以下顺序检查:

  • 查看Console面板是否有红色编译错误,存在编译错误时所有Editor特性都不会被加载
  • 确认脚本存放的文件夹名确实是Editor,注意拼写大小写,嵌套在其他目录下的Editor文件夹也可以生效
  • 修改代码后菜单未刷新时,可点击顶部菜单Assets > Refresh触发资源重编译,必要时重启编辑器
  • 优先级参数如果和相邻菜单差值超过10会自动生成分隔线,注意选项是否被分到分隔线的其他区域

内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:18:41