网站开发设计jw100,自己做免费的网站,附近装修公司电话和地址,网站验证钱的分录怎么做目录 一、ContextMenu描述使用示例ContextMenuItem使用示例 二、MenuItem描述使用示例 三、MenuItem 和 ContextMenu 的区别 一、ContextMenu
描述
ContextMenu 属性用于向上下文菜单添加命令。 在该附加脚本的 Inspector 中#xff0c;当用户选择该上下文菜单时#xff0c… 目录 一、ContextMenu描述使用示例ContextMenuItem使用示例 二、MenuItem描述使用示例 三、MenuItem 和 ContextMenu 的区别 一、ContextMenu
描述
ContextMenu 属性用于向上下文菜单添加命令。 在该附加脚本的 Inspector 中当用户选择该上下文菜单时 将执行此函数。 这对于从该脚本自动设置场景数据非常有用。 此函数必须是非静态的。 注意ContextMenu这个类创建的选项都是基于当前它所在的集成自MonoBehaviour的组件类的不像 MenuItem 几乎是一个全局存在的选项
使用示例
using UnityEngine;public class Cube : MonoBehaviour
{[ContextMenu(Do Something)]void DoSomething(){Debug.Log(Perform operation);}
}效果如图
ContextMenuItem使用示例
为某个字段添加右键菜单 [ContextMenuItem(add testName, ContextMenuFunc2)]public string testName ;private void ContextMenuFunc2(){testName testName;}效果如图 注意我们给变量testName加菜单的时候一定要把[ContextMenuItem]写在testName上而不是方法private void ContextMenuFunc2()上面方法的调用靠在ContextMenuItem上设置参数来完成。
二、MenuItem
描述
MenuItem 属性用于向主菜单和检视面板上下文菜单添加菜单项。 该 MenuItem 属性能够将任何静态函数转变为菜单命令。仅静态函数可使用 MenuItem 属性。
注意MenuItem是编辑器类所以技能导入 using UnityEditor; 命名空间且一般我们的类也不是集成自MonoBehaviour的而是集成ScriptableObject的。
使用示例
下面是MenuItem在unity顶部菜单栏的一些用法如图
1 最普通的MenuItem调用
[MenuItem(MenuItem/普通的顶部菜单)]
private static void MenuItemNormal()
{Debug.Log(普通的顶部菜单);
}需要注意的就是 unity 的顶部菜单的父一级是不支持中文的就是MenuItem那一级它的子级就没关系了。
2MenuItem菜单的先后排序
[MenuItem(MenuItem/MenuItem2, false, 2)]
private static void MenuItemFunc2()
{Debug.Log(MenuItemFunc2);
}
[MenuItem(MenuItem/MenuItem1, false, 1)]
private static void MenuItemFunc1()
{Debug.Log(MenuItemFunc1);
}如图中所示虽然我们在写代码的时候是 item2 在前但是我们在设置顺序时给它设的是2所以最后显示的时候则是1在前2在后
3MenuItem与快捷键进行关联
[MenuItem(MenuItem/快捷键1 _%#_HOME)]
private static void MenuItemFunc3()
{Debug.Log(MenuItemFunc3);
}
[MenuItem(MenuItem/快捷键2 _%#_LEFT)]
private static void MenuItemFunc4()
{Debug.Log(MenuItemFunc4);
}这2个item选项跟快捷键关联起来了可以直接使用快捷键来调用。 规则是 % ctrl # Shift Alt LEFT/RIGHT/UP/DOWN 上下左右 F1…F2 F… HOME, END, PGUP, PGDN 键盘上的特殊功能键 特别注意的是如果是键盘上的普通按键比如a~z则要写成 _a ~ _z 这种带_前缀的。
4选中的不是指定类型的对象菜单项会被禁掉
[MenuItem(MenuItem/Selected GameObject)]
private static void SelectedGameObject()
{Debug.Log(SelectedGameObject);
}[MenuItem(MenuItem/Selected GameObject, true)]
private static bool CheckObjectType()
{Object selectedObject Selection.activeObject;if(selectedObject ! null selectedObject.GetType() typeof(GameObject)){return true;}return false;
}这段的意思就是如果你没有选中任何游戏对象或者你选中的不是GameObject类型的对象时MenuItem/Selected GameObject选项会是被禁用的灰色状态只有选的是指定类型的选项时才是正常的可点击状态。
5可以在 project 窗口里右键到菜单 如图
[MenuItem(Assets/在Project目录里右键1)]
private static void Assets_right_btn1()
{Debug.Log(在Project目录里右键1);
}我们只需要把选项设置在Assets目录的子上就可以在Project窗口里右键出菜单了当然也是可以有例如 Assets/Create/XXX 这样的目录存在。
6在 Inspector 窗口中的指定控件身上右键到选项 如图
[MenuItem(CONTEXT/Rigidbody/在Rigidbody上右键)]
private static void CONTEXT_Rigidbody_right_btn()
{Debug.Log(在Rigidbody上右键);
}有时候我们想在某个控件上增加一些功能菜单做一些比如自动给控件赋值等这种功能。 思路跟上面的其实是一样的只不过我们这次的父换成了CONTEXT而已。
7通过在 GameObject/UI 选项夹里增加选项使菜单在Hierarchy窗口中被右键到
如图
[MenuItem(GameObject/UI/在GameObject目录里右键)]
private static void GameObject_right_btn()
{Debug.Log(在GameObject目录里右键);
}思路跟前面一样我们在 GameObject/UI/ 目录下增加了一个选项我们发现不止在 Hierarchy 窗口中看到了它在顶部菜单栏相同的层次下也看到了它。 但是这里有个问题就是我们并不能够像 GameObject/XXX 这样把选项放在 UI 的外面这样做的话我们只会在顶部栏的 GameObject 目录下发现那个XXX的选项在 Hierarchy 什么也不会有这点需要大家注意。
补充还有一种在Hierarchy窗口设置菜单的方法就是用编辑器的EditorUtility类。
三、MenuItem 和 ContextMenu 的区别
ContextMenu和[MenuItem(“CONTEXT/xxx/xxx”)]实现的效果一样都是给组件的右键菜单添加菜单项。 不同的是
MenuItem位于UnityEditor中ContextMenu位于UnityEngine中;
所以ContextMenu可以用在继承自MonoBehaviour的脚本中。
若为自定义的脚本添加右键菜单项可使用ContextMenu和MenuItem若为系统组件添加右键菜单项使用MenuItem。