ue3dUIToolkit使用TreeView实现单列树视图

UIToolkit使用TreeView实现单列树视图

分类:
ue3d - UIToolkit使用TreeView实现单列树视图

这教程3D天堂将解释如何使用Unity的UI Toolkit中的TreeView实现单列树视图。

介绍

使用UI工具包TreeView,可以创建如下所示的树状外观,阅读本文的同时可以从这里进行参考。

ue3d - UIToolkit使用TreeView实现单列树视图

此文总结了如何使用这样的TreeView创建一个EditorWindow多列树视图可以从下面的站内文章中参阅

创建UXML文件

首先在UXML文件中创建布局,设置如下

<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
    <ui:TreeView view-data-key="unity-tree-view" focusable="true" />
</ui:UXML>

另存为editor_layout.uxml

接下来,只要在列表中显示的每个项目创建一个布局,但它只显示标签。

<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
    <ui:Label text="Label" />
</ui:UXML>

另存为item_layout.uxml

创建编辑器窗口

然后创建以下EditorWindow脚本

using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

public sealed class Example : EditorWindow
{
    [SerializeField] private VisualTreeAsset editorLayout;
    [SerializeField] private VisualTreeAsset labelItemLayout;
    private readonly List<TreeViewItemData<Item>> _rootItems = new();

    private void Reset()
    {
        var id = 0;
        for (var i = 0; i < 10; i++)
        {
            // Create a list of child items
            var items = new List<TreeViewItemData<Item>>(10);
            for (var j = 0; j < 10; j++)
            {
                var item = new TreeViewItemData<Item>(id++, new Item { name = $"Item {j}" });
                items.Add(item);
            }

            // Create a root item and add child items
            var rootItem = new TreeViewItemData<Item>(id++, new Item { name = $"Group {i}" }, items);
            
            // Add only root item to data source
            _rootItems.Add(rootItem);
        }
    }

    private void CreateGUI()
    {
        editorLayout.CloneTree(rootVisualElement);
        var treeView = rootVisualElement.Q<TreeView>();

        // Set data source
        treeView.SetRootItems(_rootItems);

        // The process of creating the item layout
        treeView.makeItem = labelItemLayout.CloneTree;

        // The process of setting the content of the item
        treeView.bindItem = (e, i) => e.Q<Label>().text = treeView.GetItemDataForIndex<Item>(i).name;
    }

    [MenuItem("Window/Example")]
    public static void ShowWindow()
    {
        GetWindow<Example>();
    }

    [Serializable]
    public struct Item
    {
        public string name;
    }
}

可以为每个项目生成布局并绑定项目的内容。

执行结果

从菜单项Window → Example打开一个窗口会得到如下结果:

ue3d - UIToolkit使用TreeView实现单列树视图

现在能够确认它已正确的实施了。

以上是3D天堂关于Unity中的UI Toolkit使用MultiColumnTreeView实现多列树视图的全部内容,如果你有任何反馈,请随时在本页面下方留言。

相关信息

  • 类型:知识
  • 字数:251
  • 字符:3291
  • 适用软件:Unity
  • 说明:无
  • 编号:157051

热门内容

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

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