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的实用技术为主。
总起:
菜单栏的扩展,这边主要讨论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的实用技术为主。
相关文章推荐
- Unity3D 场景编辑器扩展学习笔记-Editor
- unity3D 编辑器扩展,MenuItem 和 ContextMenu 的使用方法
- Unity3D Editor 编辑器扩展2 选取物体、撤销操作和窗口小部件的显示
- 编辑器菜单的扩展(MenuItem)
- unity3D 编辑器扩展,MenuItem 和 ContextMenu 的用法和分析
- unity3D 编辑器扩展,MenuItem 和 ContextMenu 的使用方法分析
- 「Unity3D」(9)自定义编辑器菜单扩展总结
- Unity3D Editor 编辑器简易教程
- Unity3D 场景编辑器扩展学习笔记-Handles&Event
- unity3d拓展编辑器Editor的使用
- Unity3d——自定义编辑器Editor教程
- Unity3D使用经验总结 编辑器扩展篇
- [Unity3D]ResourceManager类及其编辑器扩展
- Unity编辑器拓展【菜单扩展】
- 【中文】Joomla1.7扩展介绍之JCK editor(在线编辑器)
- Unity3d 编辑器扩展系列-Serializable的使用
- Unity3D 场景编辑器扩展学习笔记-Handles
- Unity3D编辑器扩展(二)之对Inspetor面板的扩展
- Unity3d UnityEditor编辑器定制和开发插件
- 【unity3d Editor开发】简单节点编辑器(二)