ContextMenu属性,允许我们在Inspect检视面板对Component组件添加菜单功能。
public ContextMenu (string itemName);
public ContextMenu (string itemName, bool isValidateFunction);
public ContextMenu (string itemName, bool isValidateFunction, int priority);
param1: itemName 表示菜单的路径。
param2: isValidateFunction 默认为false,为true时表明这是一个验证函数,它将在调用具有相同的itemName的菜单函数之前被调用。
param3: priority 优先级,表示菜单的显示顺序,默认为1000,数值越小的越靠上显示,若相邻菜单间差距大于11则会被分割线进行分割。
具体如下所示:
1. public ContextMenu (string itemName);
[ContextMenu("Do Something")]
public void DoSomething()
{
Debug.Log("Do Something.");
}
点击该菜单项后,控制台会输出字符串"Do Something."
2. public ContextMenu (string itemName, bool isValidateFunction);
当isValidateFunction为true时表明这是一个验证函数,当返回值为true时,该菜单项才可以进行选择,否则不可选择。
[ContextMenu("Function", false)]
public void Function()
{
Debug.Log("Function Invoke.");
}
[ContextMenu("Function", true)]
public bool FunctionValidate()
{
return false;
}
如图所示,菜单项Function不可点击:
3. public ContextMenu (string itemName, bool isValidateFunction, int priority);
[ContextMenu("Function1", false, 20)]
public void Function1() { }
[ContextMenu("Function2", false, 10)]
public void Function2() { }
[ContextMenu("Function3", false, 31)]
public void Function3() { }
如图所示,priority数值越小的越靠上显示,差值大于11会被分割线进行分割。
综上所述,可见ContextMenu与MenuItem用法基本一致,可以参照第一篇文章 编辑器开发之MenuItem。
ContextMenu特性用于函数,它需要声明在函数上方,除此之外,另一个特性ContextMenuItem可以用于字段。
public ContextMenuItemAttribute (string name, string function);
param2: 点击该菜单要调用的函数。
如下,在Foo组件检视面板右键Size字段时,会显示Reset菜单项,点击后执行ResetSize函数,会将Size值归0.
[ContextMenuItem("Reset", "ResetSize")]
public int Size = 0;
void ResetSize()
{
Size = 0;
}