Unity拓展——菜单栏拓展
1. Unity菜单栏拓展
当我们打开Unity的时候,我们可以直接看到在整个软件视图的最上方,有一个菜单栏如下图所示:
实际上,除了默认给我们展示出来的,用户也可以自己根据自己的需要进行拓展。我们假设,要在现有拓展栏基础上,拓展出一个名为:MyFirstMenu的选项,下方有若干个复选项。该怎么做呢?
1.1 基础显示
首先,在Asset文件夹下(也就是整个工程文件的根节点下)创建一个Editor文件夹,在这个Editor文件夹下新建一个脚本,我们起名为:MyMenu.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;/// <summary>
/// Unity菜单栏扩展
/// </summary>
public class MyMenu : MonoBehaviour
{[MenuItem("MyFirstMenu/MenuTest1")]public static void MenuTest1(){Debug.Log("MenuTest1");}
}
这样我们,就在菜单栏拓展出来一个MyFirstMenu的选项,点击这个MyFirstMenu,下方就会有一个MenuTest1选项,点击这个MenuTest1,就会在Console面板输出“MenuTest1”。如下图所示:
不难看出,
当然了,我们也可以拓展出多个选项,比如说:在MyMenu.cs当中,我再写一个静态方法:
[MenuItem("MyFirstMenu/MenuTest2")]public static void MenuTest2(){Debug.Log("MenuTest2");}
这样一来,我们拓展出来的菜单栏就会有两个选项:
单击这个MenuTest2,就会在Console面板输出:MenuTest2
1.2 验证函数
当然,现实情况不可能这么简单,比如说,我们单击Unity默认的GameObject菜单:
我们发现,除了默认开启的选项,还有许多默认关闭的选项,那么如何控制这些选项的开启和关闭呢?这个时候就需要验证函数了。当然了,Unity的MenuItem已经给我提供了接口,如下:
public MenuItem(string itemName, bool isValidateFunction, int priority);
我们看到,他有三个参数,其中第二个参数,我们将其设置为true,就代表当前方法是一个验证函数。
下面,我们专门针对这个MenuTest2选项,写一个验证函数。
[MenuItem("MyFirstMenu/MenuTest2", true)]
private static bool MenuTestValidation1()
{return false;
}
这样我们就成功把MenuTest选项设置为默认关闭:
当然了,现实逻辑不可能这么简单,这里只是简单介绍一下原理。
1.3 设置快捷键
我们回到之前那个GameObject面板,我们看到有许多选项后面都有快捷键,比如说Create Empty
的快捷键就是ctrl+shift+N。实际上,这个也可以由用户自定义。注意:如果一个函数一个选项有验证函数,那么要把快捷键设置写在验证函数当中,如果没有验证函数,那么写在设置的地方即可。
比如说,我们想给这个MenuTest2选项设置一个快捷键组合:Ctrl+9,那么我们只需在MenuItem的第一个参数后面打一个空格,然后写上相关设置即可:(当中的%9代表Ctrl+9)。这个时候,你按Ctrl+9,也会触发用户自定义的功能
[MenuItem("MyFirstMenu/MenuTest2 %9", true)]
private static bool MenuTestValidation1()
{return false;
}
在unity当中,快捷键大多数都是以alt,ctrl,shift这三个按键以及其他按键的相关组合构成。根据官网的说法,这些快捷按钮对应的符号如下:
% :(ctrl on Windows, cmd on macOS),
# :(shift),
& :(alt).
这就是%9代表Ctrl+9的原因。
1.4 调整菜单栏选项的顺序
那么,我们刚刚写的MenuTest1,MenuTest2能否调整顺序呢?答案是肯定的,这个时候就需要MenuItem的第三个参数了。调整这第三个参数的大小,就会调整这这些按钮显示的优先级。
如果我们写成如下这个样子:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;/// <summary>
/// Unity菜单栏扩展
/// </summary>
public class MyMenu : MonoBehaviour
{[MenuItem("MyFirstMenu/MenuTest1",false,2)]public static void MenuTest1(){Debug.Log("MenuTest1");}[MenuItem("MyFirstMenu/MenuTest2 %9",false,1)]public static void MenuTest2(){Debug.Log("MenuTest2");}}
这个时候,MenuTest1,MenuTest2显示的顺序就会改变
这个时候,我们回到GameObject菜单观察一下,我们看到有的选项之间有横线相隔如下:
那么这个分割线又是怎么搞出来的呢?其实,只要你的优先级相差足够大,这个分割线就会显示出来。经测试,二者的优先级相差要超过10才行(正好为10都不可以)
[MenuItem("MyFirstMenu/MenuTest1",false,12)]
public static void MenuTest1()
{Debug.Log("MenuTest1");
}[MenuItem("MyFirstMenu/MenuTest2 %9",false,1)]
public static void MenuTest2()
{Debug.Log("MenuTest2");
}
Unity拓展——菜单栏拓展相关推荐
- Unity编译器拓展学习总结(二):各个平台菜单栏拓展
Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前情参考:Unity编译器拓展学习总结(一):常用工具API 文章目录 Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前言 菜单栏拓展 ...
- Unity 3D 菜单栏快捷键详解
nity 3D菜单栏及快捷键详解 File 菜单 Edit 菜单 Assets 菜单 GameObject 菜单 Component 菜单 Window 菜单 Help 菜单 其他快捷键 Unity ...
- Unity Editor 编辑器拓展 11——SerializedProperty 和 SerializedObject 的使用
在自定Inspector面板的时候,经常会使用到SerializedProperty 和 SerializedObject.使用这两个类可以十分方便的进行数据的显示与处理.他们自带撤销记录.使用的Un ...
- 计算机专业素质拓展日记,拓展活动三年级日记
拓展活动三年级日记 前几天,我们去参加拓展活动.我们坐车来到智明教育基地,那里很好玩的. 日记二年级日记 先进入眼帘的是一片大操场,那里有很多车,过了一会儿,车没了,所有班级的人都站在那.教官开始介绍 ...
- Unity 3D 菜单栏与快捷键
菜单栏是 Unity 3D 操作界面的重要组成部分之一,其主要用于汇集分散的功能与板块,并且其友好的设计能够使游戏开发者以较快的速度查找到相应的功能内容. 菜单栏 File 菜单 File 菜单主要用 ...
- 团队融洽之拓展器械拓展训练
为了让新人能更快地融入一个新的大家庭,并且能过更好地展现自我,日前,有多数公司开始为员工定期开展拓展训练,以提高员工的自身团结合作的能力,以及工作的毅力. 此类活动的拓展一般将工作中的同事们分成了红队 ...
- python粘性拓展_拓展Python Markdown
通过拓展 Python Markdown 来获得类似 django 官方文档的阅读体验. 最近阅读 django 的官方文档,发现一些很细节的文档内容展现形式,能够极大地提高文档的阅读体验.阅读其他技 ...
- python粘性拓展_Python 拓展之详解深拷贝和浅拷贝
写在之前 在昨天的文章里 (零基础学习 Python 之字典),写字典的方法的时候留了一个小尾巴,那就是 copy() 方法还没讲.一是因为 copy 这个方法比较特殊,不单单是它表面的意思:二是以为 ...
- python粘性拓展_Python拓展
1 Python补充 Python 2.x 与 Python 3.x 除法的关系. - Python 2.x 的 / 除法:整数相除,结果舍弃小数:浮点数相除,结果保留小数. - Python 3.x ...
- Unity 拓展编辑器 - 导出UI预制体lua文件
使用oldin插件 + Unity自带拓展编辑器编写 实现效果: 界面配置基类:UIDialogConfig using Sirenix.OdinInspector; using UnityEngin ...
最新文章
- python打印换行符_Python换行符以及如何在不使用换行符的情况下进行Python打印
- 绿色经营:从优秀到卓越最显性准则
- 计算机论文指导书,计算机毕业论文指导书.doc
- SAP Authenticator apk下载
- bloomberg用法 固定收益_干货 | 日语高考高频考点:助词を的用法
- 常用加密算法的Java实现(一)
- 解决asp.net 3.5sp1错误
- Python的第三方库openpyxl
- JNI使用NewStringUTF崩溃的解决方法
- CCNA学习笔记-1 基础知识回顾
- dynamips虚拟服务:找不到指定设备
- 态势感知——活跃IP段探测脚本集合【多语言】
- 2022-2028年中国商用车产业园区行业市场竞争态势及未来前景分析报告
- SQL server-数据库的创建
- TIA博途WINCC中给IO域添加确认功能的具体方法步骤
- java.io.IOException: No such file or directory之linux权限问题
- mirai 高效率 QQ 机器人框架
- weblogic下的UDDI及对UDDI的理解
- Atmega128 控制直流伺服电机
- 微信上制作投票链接在线制作投票链接如果制作投票链接
热门文章
- java 中文字体_java安装字体--在Swing设置中文字体(微软雅黑)
- 第三版新视野大学英语读写教程4结业考点(1,2,3,5,6单元)
- 曙光服务器面板显示感叹号,磁盘阵列和磁带库面板感叹号灯橙色
- java http put请求方式_HttpClient HTTP PUT请求方法示例
- linux中reboot函数在哪,reboot()函数 Unix/Linux
- 简单分析RTMP规范
- 千人虚拟社交体验,多人元宇宙场景真的可行么?
- 王者荣耀: 史上最长对局, 无法打破的神话英雄, 10小时4千人头
- Java课程学习四:编程题
- nyoj 779 兰州烧饼