您的位置:首页 > 移动开发 > Unity3D

Unity3D Editor 编辑器扩展 MenuItem标签 菜单的扩展

2018-02-27 00:44 776 查看
环境:Unity2017.2 语言:C#
 
总起:
菜单栏的扩展,这边主要讨论4个常用窗口的菜单栏:
1.整个Unity编辑器顶头的菜单栏;
2.Inspector挂Component的;
3.Hierarchy游戏物体节点树的;
4.Project游戏资源文件的。
 
这边最主要的一个类就是MenuItem。
 
MenuItem是在UnityEditor的namespace下,所以使用该标签的类必须放在Editor的目录下或其子目录下。因为UnityEditor这个dll不会在打包的时候放到包体中,所以如果没有放到Editor目录下,就会产生编译错误,这点要注意。
 
MenuItem:
简单的使用:[MenuItem("Tools/Test", false, 23)]
public static void Test()
{
Debug.Log("Test");
}

[MenuItem("Tools/Test", true, 23)]
public static bool ValidateTest()
{
return true;
}

首先注意使用MenuItem的方法必须是静态的。
 
第一个函数Test现在就能在菜单栏中找到:



点击之后就能输出Log信息。
 
第二个函数主要用于确定当前菜单是否能使用,如果返回为false,则无法点击。
 
参数
MenuItem("Tools/Test", true, 23):
1.菜单路径,以/分割;
2.是否为验证函数,默认为false;
3.菜单的优先级,数字越小显示在越上方。并且俩相邻菜单间差距为11以上的优先级会被分为两组,即菜单间会多个分隔线。默认为1000。
 
菜单的快捷键
单独的一个按键以“空格 + 下划线 + 想要的按键”增加在路径后缀,空格千万不要忘记。
 
“Tools/Test _g”,即在Unity中按下g就可以直接执行该菜单。
 
以“Tools/Test %&g”表示按住ctrl和alt,再按下g就能触发。特殊符号:%(ctrl/cmd)、#(shift)、&(alt)。
 
其他支持的按键:LEFT、RIGHT、UP、DOWN、F1..F12、HOME、END、PGUP、PGDN。
 
当然也支持类似#LEFT是左shift之类的按键。
 
菜单使用注意
1.创建GameObject时,使用GameObjectUtility.SetParentAndAlign方法设置父节点,可以重置坐标;
2.使用类似于Undo.RegisterCreatedObjectUndo方法注册撤销操作(这个我们之后在讨论)。
 
在Hierarchy和Project窗口下添加菜单
使用过一段Unity时间的人可能已经发现了,Hierarchy窗口下的右键菜单就是GameObject菜单栏中的部分菜单,而Project中的是Assets所有的。
 
所以是不是只要添加到GameObject和Assets菜单下就能在两个窗口中出现呢?
 
这个猜测完全正确。
 
使用以下代码就能在窗口中添加:[MenuItem("GameObject/Test2", false, 11)]
public static void PasteTRValue()
{
Debug.Log("Test2");
}

[MenuItem("Assets/Test3", false)]
public static void Test3()
{
Debug.Log("Test3");
}

在Inspector窗口中添加菜单
这个窗口的添加就有些特殊了。说白了,其实就是给脚本添加右键菜单。
 
例子:[MenuItem("CONTEXT/Transform/Test4")]
public static void Test4()
{
Debug.Log("Test4");
}

效果:



以上代码给Transform脚本添加了一个右键菜单。想要给所有脚本都添加,可以在Object上添加菜单。
 
ContextMenu和ConTextMenuItem:
这两个类实际上就是给Inspector窗口中添加菜单,但与MenuItem不同的是写在本身Component脚本中,也就是隶属于UnityEngine命名空间,会被打包。
 
例子:using UnityEngine;

public class Clock : MonoBehaviour
{
[ContextMenuItem("Add Hour", "AddHour", order = 1)]
public int Hour = 10;

public void AddHour()
{
Hour += 1;
}

[ContextMenu("Sub Hour", false, 10)]
public void SubHour()
{
Hour -= 1;
}
}
ContextMenu的功能和参数与MenuItem完全一致,不同的是非静态。
 
而ContextMenuItem这个标签就有点意思了。
 
他是给你在右键变量名称时添加菜单:



ContextMenuItem参数
ContextMenuItem("Add Hour", "AddHour", order = 1):
1.菜单的名称;
2.菜单执行的方法,要求脚本中必须有;
3.按钮的先后顺序。
 
今天就把菜单的位置都过了一遍,下篇文章会介绍选中物体的获取、撤销等详细操作,期待一下咯。
 
个人:
学习了一年的Unity,虽然说出个知识点,大概也都知道点,但是研究的不够深入,而且因为工作需要,越来越感到自己知识的匮乏,所以准备最近仍旧以研究Unity的实用技术为主。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: