• Unity Editor自定义菜单排序(MenuItem Order)


    扩展Unity的菜单MenuItem

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

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

    我的Unity版本:2019.3.7f1

    创建菜单这几种写法都是可行

    1. 函数参数有MenuCommand (menuCommand.context是当前菜单选中的对象)
    [MenuItem("GameObject/KSFramework/Custom Game Object", false, 10)]
    static void CreateCustomGameObject(MenuCommand menuCommand)
    {
    	GameObject go = new GameObject("Custom Game Object");
    	//把新创建的gameobject放在选中节点下
    	GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
    	// Ctrl+Z可撤销当前操作
    	Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);
    	Selection.activeObject = go;
    }
    
    1. 普通创建一个菜单
    [MenuItem("GameObject/排在系统菜单前(-1)", false, -1)]
    public static void GameObjectMenu1()
    {
    	Debug.Log("hello");
    }
    

    菜单排序

    使用MenuItem创建菜单时,最后一个字段就是菜单的排序

    [MenuItem("GameObject/UI/Image/创建", false, 2001)]
    static public void AddImage(MenuCommand menuCommand)
    {
    	GameObject go = DefaultControls.CreateImage(GetStandardResources());
    	PlaceUIElementRoot(go, menuCommand);
    	var image = go.GetComponent<img>();
    	image.raycastTarget = false;
    }
    
    MenuItem(string path, bool isValidateFunction, int priority)
    
    - path 在那个菜单上显示的,如GameObject/UI/xx ,会在Hierchy的右键菜单中显示
    - isValidateFunction 当设置为true时,函数的返回值要为bool。另一个和它用MenuItem标记的相同路径的方法在调用之前会调用它,根据返回值来验证方法是否可执行,比如:开启服务菜单只能点一次,点完之后置灰,需要关闭才能再点击。
    - Priority 菜单的排序
    

    Unity内置菜单排序

    Assets菜单的排序优先级

    注意:不指定排序,也是在最后面,比如:[MenuItem("Assets/获取size")]

    Unity原生Assets菜单的排序优先级

    Assets/Create菜单排序

    Assets/Create菜单排序

    GameObject菜单排序

    GameObject菜单中优先级小于50的,也将出现在Hierarchy的右键菜单中

    GameObject菜单排序

    Window菜单排序

    Window菜单排序

    其它

    自定义AddComponent名字

    一般情况下,我们点AddComponent,然后输入脚本的名字就可以附加上去,当然也可以自定义一个名字,比如

    [AddComponentMenu("KSFramework/ActorBase")]
    public class ActorBase : MonoBehaviour
    

    自定义AddComponent名字

    参考资料

    这篇文章非常详细地讲解了菜单项中的排序,包括Unity默认菜单的排序数值,本文的一些图也是来源于这篇文章 《 Guide to Extending Unity Editor’s Menus

  • 相关阅读:
    [学习]利用SqlDataAdapter Insertcommand 获取刚新增的自动编号ID值
    [转]下拉框OnChange触发文本框值变化
    .NET伪静态使用以及和纯静态的区别
    Java之替换“\n”符号 Binary
    【转载】三种东西永远不要放到数据库里 Binary
    如何为Android Spinner设置一个初始值(How to make an Android Spinner with initial text “Select One”)? Binary
    Android之SQLite列操作 Binary
    Android——调用系统相册 Binary
    Android——用XML的selector实现按钮多态 Binary
    keystore信息的查看 Binary
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/14837474.html
Copyright © 2020-2023  润新知