[Unity]扩展Hierachry的右键菜单

本文介绍如何在Unity中扩展编辑器菜单,包括顶部GameObject菜单及Hierarchy视图右键菜单的自定义选项添加方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游戏制作到一定阶段后,一定会出现一些GameObject的“模板”。比如一个敌人一定会有一个“Enemy Behaviour”、“Box Collider”等。虽然Prefab可以用来作为“预制件”,但是Prefab产生的物体和Prefab自身有关联,同时还要从Project菜单里去找到Prefab再拖出来。
一个解决方案是扩展编辑器菜单,就像右键Hierachry时出现的3D Object、2D Object一样。可以创造GameObject的菜单有两个,一个是顶部菜单的GameObject,另一个是Hierachry的右键菜单。
https://unity3d.com/cn/learn/tutorials/topics/interface-essentials/unity-editor-extensions-menu-items 的文章中提到了如何扩展顶部菜单.

using UnityEngine;
using UnityEditor;
 
public class MenuItems
{
    [MenuItem("Tools/Clear PlayerPrefs")]
    private static void NewMenuOption()
    {
        PlayerPrefs.DeleteAll();
    }
}

但是没有提到Hierachry右键菜单的扩展。
http://answers.unity3d.com/questions/22947/adding-to-the-context-menu-of-the-hierarchy-tab.html 中的文章提到,Hierachry右键菜单其实来自于顶部GameObject的菜单,只是截取了其中的“一段”。如果要扩展,只需要把添加到GameObject菜单的菜单项的优先级设置到这“一段”之间即可。这样就可以同时出现在GameObject菜单和Hierachry右键菜单中了。

 public static class Test {
 
     [MenuItem("GameObject/MyMenu/Do Something", priority = 0)]
     static void Init() {
         Debug.Log("here");
     }
 }

下图显示了两个菜单中各项的优先度。可以看到只要优先度在0到49之间,就可以同时出现在两个菜单中。
871155-20170410200603954-145479723.png
871155-20170410200633610-960953046.png

转载于:https://www.cnblogs.com/yangrouchuan/p/6690689.html

### 如何在 Unity 编辑器中添加自定义右键菜单项以运行特定方法 为了实现在Unity编辑器中的右键菜单上添加可执行特定方法的新选项,需遵循一系列开发实践。当涉及到向`Assets`上下文菜单增添条目时,在编写用于扩展的C#类前,务必确保该类位于名为`Editor`的特殊文件夹内,并且此类应继承于`EditorWindow`或直接作为静态类存在[^2]。 对于具体实现而言,下面是一个简单的例子,展示了怎样创建一个能够响应右键单击事件并调用指定函数的方法: #### 创建自定义右键菜单项 ```csharp using UnityEngine; using UnityEditor; public class CustomMenuExample : MonoBehaviour {} // 将此脚本放置在一个叫做 Editor 的文件夹里 namespace EditorCustomization { public static class AssetContextMenuExtension { [MenuItem("Assets/My Custom Action %&m")] // 定义新的菜单路径以及快捷方式 private static void PerformCustomAction() { Debug.Log("Executing custom action from context menu..."); // 这里可以放入任何想要执行的具体逻辑代码 } [MenuItem("Assets/My Custom Action %&m", true)] // 返回true表示启用菜单项;false则禁用 private static bool ValidatePerformCustomAction() { Object[] selectedObjects = Selection.GetFiltered(typeof(Object),SelectionMode.Assets); return selectedObjects.Length > 0; // 只有当选定至少一项资源时才激活菜单项 } } } ``` 上述代码片段实现了两个主要部分的功能:一是通过装饰器`[MenuItem]`来注册一个新的右键菜单命令——“我的自定义动作”,二是提供了验证逻辑以控制这个新加入的菜单项何时可用。这里还设定了一个键盘组合键 `%&m` 来快速触发这一行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值