您当前的位置: 首页 >  unity

CoderZ1010

暂无认证

  • 3浏览

    0关注

    168博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

二、Unity编辑器开发之ContextMenu

CoderZ1010 发布时间:2021-02-26 10:20:05 ,浏览量:3

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);

param1: 菜单内容。

param2: 点击该菜单要调用的函数。

如下,在Foo组件检视面板右键Size字段时,会显示Reset菜单项,点击后执行ResetSize函数,会将Size值归0.

    [ContextMenuItem("Reset", "ResetSize")]
    public int Size = 0;
    void ResetSize()
    {
        Size = 0;
    }

关注
打赏
1653184800
查看更多评论
立即登录/注册

微信扫码登录

0.0535s