MenuItem的用法

1.

MenuItem是编辑器属性(Editor Attributes)类,所以在使用它之前要添加一句:using UnityEditor;

2.

常规用法:

MenuItem属性写在一个静态方法之前;

MenuItem必须定义子菜单,像这样写:[MenuItem("Delete")] 是不行的。

using UnityEngine;
using System.Collections;
using UnityEditor;

public class DelelteAll 
{

	[MenuItem("Delete/Delete All Keys")]
	static void DeleteAllKeys()
	{
		PlayerPrefs.DeleteAll();
	}

}

3.

给菜单项添加快捷键:

To create a hotkey you can use the following special characters: % (ctrl on Windows, cmd on OS X),# (shift),& (alt), <b>_</b> (no key modifiers). For example to create a menu with hotkey shift-alt-g use"MyMenu/Do Something #&g". To create a menu with hotkeyg and no key modifiers pressed use"MyMenu/Do Something _g".

添加菜单项的快捷键时,首先要输入一个空格,%在Windows中代表ctrl(OS X中代表cmd),#代表shift,&代表alt,_代表什么也没有。

如添加shift+alt+g快捷键时使用“MyMenu/Do Something #&g”, 添加g快捷键时使用"MyMenu/Do Someting _g"(必须按大写的G才起作用哦)

Some special keyboard keys are supported as hotkeys, for example "#LEFT" would map to shift-left. The keys supported like this are: LEFT, RIGHT, UP, DOWN, F1 .. F12, HOME, END, PGUP, PGDN.

快捷键还支持一些特殊的键,如“#LEFT”代表左shift。支持的键有:LEFT, RIGHT, UP, DOWN, F1 .. F12, HOME, END, PGUP, PGDN.

4.

在Inspector中添加上下文菜单,类似于ContextMenu属性。

写法为[MenuItem("CONTEXT/要添加菜单项的组件类型/菜单项名")]

在实现菜单命令的静态函数中要添加一个MenuCommand类型参数command

当点击菜单项时,菜单项所在的组件实例将传递给command,通过comman.context获取该组件的实例,从而对该组件进行操作。

	// Add a menu item called "Double Mass" to a Rigidbody's context menu.
	[MenuItem ("CONTEXT/Rigidbody/Double Mass")]
	static void DoubleMass (MenuCommand command) {
		Rigidbody body = (Rigidbody)command.context;
		body.mass = body.mass * 2;
		Debug.Log ("Doubled Rigidbody's Mass to " + body.mass + " from Context Menu.");
	}


5.

添加验证函数以选择是否启用该菜单项

假如有个如下所示的菜单项:

这是一个再普通不过的菜单项,目的是获取当前选择的物体的transform并输出它的名字。

当我们没有选择任何一个物体时,会报错。

	// Validated menu item.
	// Add a menu item named "Log Selected Transform Name" to MyMenu in the menu bar.
	// We use a second function to validate the menu item
	// so it will only be enabled if we have a transform selected.
	[MenuItem ("MyMenu/Log Selected Transform Name")]
	static void LogSelectedTransformName ()
	{
		Debug.Log ("Selected Transform is on " + Selection.activeTransform.gameObject.name + ".");
	}


所以我们要给该菜单项的启用添加限定条件:只有当前选择的物体的transform不为null时,才启用该菜单项。

方法为:

	// Validate the menu item defined by the function above.
	// The menu item will be disabled if this function returns false.
	[MenuItem ("MyMenu/Log Selected Transform Name", true)]
	static bool ValidateLogSelectedTransformName () {
		// Return false if no transform is selected.
		return Selection.activeTransform != null;
	}


可以看到,第一行的写法,MenuItem中的菜单项名字完全与上面的一致,只是多了一个参数true.

另外写一个静态函数,只有该函数返回true时,相应的菜单项才能被启用。

只有当MenuItem中的第二个参数设为true时,才能成为验证函数。若该参数为false,等同于没有第二个参数,使得其下的静态函数成为菜单命令函数。

实际上这第二个参数的名字为bool isValidateFunction,也就是说是否为验证函数的意思。

 

6.

设置多个菜单项在菜单栏中的显示顺序

MenuItem(string itemName, bool isValidateFunction, int priority);
priority小的排在前面,大的排在后面。

注意,如果不希望菜单项成为验证函数,把isValidateFunction设置为false就可以了。否则是不会显示在菜单栏中的

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值