ue3d如何实现Unity编辑器Contextual Menu(上下文菜单)

如何实现Unity编辑器Contextual Menu(上下文菜单)

分类:

本文总结一下在UI Toolkit中使用Unity编辑器的Contextual Menu,译为上下文或右键菜单。

什么是Contextual Menu?

Contextual Menu(上下文菜单)是在Unity编辑器中点击右键时出现的菜单,跟平时操作WIN一样,当用户右键单击标签时显示一组选项

Contextual Menu(上下文菜单)在Unity编辑器中点击右键时出现的菜单

UI Toolkit提供了一种将上下文菜单添加到你自己的UI中的机制,下面是实现方法。

如何实现上下文菜单

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

public sealed class ExampleWindow : EditorWindow
{
    public void CreateGUI()
    {
        var element = new VisualElement();
        element.style.backgroundColor = Color.red;
        element.style.width = 100;
        element.style.height = 100;

        // 生成上下文操纵器
        var manipulator = new ContextualMenuManipulator(evt =>
        {
            // 菜单
            evt.menu.AppendAction("Example Menu", action => Debug.Log("Execute Example"));
            // 禁用的菜单
            evt.menu.AppendAction("Disabled Menu", action => Debug.Log("Disabled Menu"),
                DropdownMenuAction.Status.Disabled);
            // 分隔符
            evt.menu.AppendSeparator();
            // 选中菜单
            evt.menu.AppendAction("Checked Menu", action => Debug.Log("Checked Menu"),
                DropdownMenuAction.Status.Checked);
            // 如何使用用户数据(任意数据)
            evt.menu.AppendAction("Menu with User Data",
                action => Debug.Log(action.userData),
                action => DropdownMenuAction.Status.Normal
                , "This is user data");
        });
        // 当你为操纵器的目标设置可视化时,
        // 右键单击此VisualElement时,将显示上下文菜单
        manipulator.target = element;

        rootVisualElement.Add(element);
    }

    [MenuItem("Window/Example")]
    private static void Open()
    {
        GetWindow<ExampleWindow>();
    }
}

ContextualMenuManipulator通过创建一个target视觉元素并将其分配给其属性,右键单击该视觉元素时将显示上下文菜单。

创建的上下文菜单有:

  • Example Menu
  • Disabled Menu
  • Checked Menu
  • Menu with User Data

检查示例最终结果

接下来,检查上面创建的最终结果是否正确。从窗口 → 示例打开窗口并右键单击红色元素,将得到下面的结果。

当在区域点击右键时出现了Example Menu、Disabled Menu等代码中设置的菜单选项

动态添加菜单

ContextualMenuPopulateEvent允许在右键单击注册的UI时打开上下文菜单时接收回调。通过使用它并编写以下内容,可以动态添加或覆盖已注册UI的上下文菜单。

element.RegisterCallback<ContextualMenuPopulateEvent>(evt =>
{
    // 将菜单添加到由元素打开的ContextualMenu中
    evt.menu.AppendAction("Runtime Example Menu", action => Debug.Log("Execute Example"));
    
    // 你也可以删除和覆盖菜单
    //evt.menu.ClearItems();
    //evt.menu.RemoveItemAt(0);
});

以上是关于Contextual Menu上下文菜单的全部内容。如果你有任何反馈,请随时在本页面下方留言。

相关信息

  • 类型:知识
  • 字数:467
  • 字符:2902
  • 适用软件:Unity
  • 说明:无
  • 编号:169439

热门内容

提示:3D天堂作为服务提供者,尊重网络版权及知识产权,对某些行为的发生不具备充分的监控能力,若无意间侵犯到您的权利,请 联系我们,我们会在收到信息后尽快给予处理。

本站文章版权归本站自创作者所有,未经允许不得转载!