Unity编辑器菜单MenuItem和快捷键

Unity编辑器   2022-10-15 19:45   1399   0  

MenuItem 

描述

MenuItem 属性用于向主菜单和检视面板上下文菜单添加菜单项。

该 MenuItem 属性能够将任何静态函数转变为菜单命令。仅静态函数可使用 MenuItem 属性

  • 要创建快捷键,您可以使用以下特殊字符:

    • %(Windows和Linux上的CTRL,MACOS上的CMD)

    • ^(Windows,Linux和MacOS上的Ctrl)

    • #(Shift)

    • &(Alt)

  • 如果不需要特殊的修饰符键组合,则可以在下划线后给出key。

例如:

  • 使用快捷键创建菜单,请使用 "MyMenu/Do Something #&g"

  • 要使用快捷键创建菜单,并且不使用组合键:"MyMenu/Do Something _g"

  • 一些特殊的键盘键被支持为热键,例如“ #left”将映射到 shift-left。如此支持的Key是: LEFT, RIGHT, UP, DOWN, F1 .. F12, HOME, END, PGUP, PGDN, INS, DEL, TAB, SPACE.

  • 热键文本前必须有一个空格字符MyMenu/Do_g不能被解释为热键,而MyMenu/Do _g则可以被解释为热键)。

  • 将菜单项添加到“GameObject/”菜单,以在创建自定义游戏对象时,确保 调用 GameObjectUtility.SetParentAndAlign,从而确保在发生上下文单击事件时, 对新的游戏对象进行正确地重定父级(请参阅以下示例)。

  • 您的函数也应该调用 Undo.RegisterCreatedObjectUndo,以使创建操作可撤销并将 Selection.activeObject 设置到新创建的对象上。

  • 另请注意,为了将“GameObject/”中的菜单项 传播到层级视图 Create 下拉菜单和层级视图上下文菜单,它必须与 其他游戏对象创建菜单项归为一组。这可以通过将其优先级 设为 10 来实现(请参阅以下示例)。

  • 请注意,对于“GameObject/Create Other” 中没有明确优先级设置且支持旧版项目的 MenuItem 来说,接收到的优先级为 10 而非默认的 1000, 我们建议使用比“Create Other”更具描述性的类别名称,并将优先级 显式设置为 10


using UnityEditor;
using UnityEngine;
public class MenuTest : MonoBehaviour
{
    // 在菜单栏中的mymenu添加名为“Do Something”的菜单项。
    [MenuItem("MyMenu/Do Something")]
    static void DoSomething()
    {       
       Debug.Log("Doing Something...");
    }

    
    //  经过验证的菜单项。
        //  在菜单栏中的MyMenu添加名为“Log Selected Transform Name”的菜单项。
        //  我们使用第二个功能来验证菜单项
        //  因此,只有在我们选择转换时才能启用它。
        
    [MenuItem("MyMenu/Log Selected Transform Name")]
    static void LogSelectedTransformName()
    {
        Debug.Log("Selected Transform is on " + Selection.activeTransform.gameObject.name + ".");
    }

    //  验证由上面函数定义的菜单项。
        //  如果此功能返回false,则菜单项将被禁用。
        
    [MenuItem("MyMenu/Log Selected Transform Name", true)]
    static bool ValidateLogSelectedTransformName()
    {
        // Return false if no transform is selected.
        return Selection.activeTransform != null;
    }

    
    // 在菜单栏中添加一个名为“Do Something with a Shortcut Key”的菜单项
        //  并给它一个快捷方式(Windows上的Ctrl _G,MacOS上的CMD _G)。
        
    [MenuItem("MyMenu/Do Something with a Shortcut Key %g")]
    static void DoSomethingWithAShortcutKey()
    {
        Debug.Log("Doing something with a Shortcut Key...");
    }

    // 将一个名为“Double Mass”的菜单项添加到刚体的菜单中。
    [MenuItem("CONTEXT/Rigidbody/Double Mass")]
    static void DoubleMass(MenuCommand command)
    {
        Rigidbody body = (Rigidbody)command.context;
      body.mass = body.mass * 2;        
      Debug.Log("Doubled Rigidbody's Mass to " + body.mass + " from Context Menu.");
    }

    //添加菜单项以创建自定义游戏对象。
        //优先级1确保将其与其他类型的其他菜单项分组

    [MenuItem("GameObject/MyCategory/Custom Game Object", false, 10)]
    static void CreateCustomGameObject(MenuCommand menuCommand)
    {
        GameObject go = new GameObject("Custom Game Object");
        GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);     
        Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);        
        Selection.activeObject = go;
    }
}

构造函数

MenuItem创建一个菜单项并在选中此菜单项后调用静态函数。


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。
QQ
微信
打赏
扫一扫