ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity编辑器拓展(MenuItem)

2021-11-06 17:02:40  阅读:262  来源: 互联网

标签:Do 菜单 GameObject 编辑器 Unity static MenuItem MyMenu


MenuItem

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

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

要创建热键,您可以使用以下特殊字符:%(在 Windows 上为 ctrl,在 macOS 上为 cmd)、# (shift)、& (alt)。如果不需要特殊的修改键组合,该键可以在下划线后给出。例如,要创建一个带有热键 shift-alt-g 的菜单,可以使用“MyMenu/Do Something #&g”。要创建带有热键 g 而不按下修改键的菜单,则使用“MyMenu/Do Something _g”

一些特殊的键盘键可支持作为热键,例如,“#LEFT”可映射到 shift-left。支持这一功能的键为:LEFT、RIGHT、UP、DOWN、F1 .. F12、HOME、END、PGUP 和 PGDN。

热键文本前必须有一个空格字符(“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
{
    private static bool isCheck = false;

    // 在顶部菜单栏创建Do Something,点击调用静态方法
    [MenuItem("MyMenu/Do Something")]
    static void DoSomething()
    {
        //打开网站
        Application.OpenURL("www.baidu.com");
        //打开目录
        EditorUtility.RevealInFinder(Application.persistentDataPath);
    }

    //可勾选的菜单
    [MenuItem("MyMenu/SetCheck")]
    static void DoSetCheck()
    {
        isCheck = !isCheck;
        Menu.SetChecked("MyMenu/SetCheck", isCheck);
    }

    // 菜单会失效当方法返回false
    [MenuItem("MyMenu/Log Selected Transform Name", true)]
    static bool ValidateLogSelectedTransformName()
    {
        return Selection.activeTransform != null;
    }

    // 快捷键
    [MenuItem("MyMenu/Do Something with a Shortcut Key %g")]
    static void DoSomethingWithAShortcutKey()
    {
        EditorApplication.ExecuteMenuItem("MyMenu/Do Something");
    }

    // 添加菜单到Rigidbody上
    [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.");
    }

    // 添加到GameObject菜单上
    [MenuItem("GameObject/MyCategory/Custom Game Object", false, 10)]
    static void CreateCustomGameObject(MenuCommand menuCommand)
    {
        GameObject go = new GameObject("Custom Game Object");
        // 设置单击的物体为父对象,为null就是场景下
        GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
        // 注册可以撤销创建操作
        Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);
        Selection.activeObject = go;
    }
}

 

 

 

标签:Do,菜单,GameObject,编辑器,Unity,static,MenuItem,MyMenu
来源: https://blog.csdn.net/m0_46712616/article/details/121180944

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有