Unity中利用UIWidgets插件創建我們自定的樹形結構


1.首先將我們自定義的節點的類編寫出來,例如

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UIWidgets;

/// <summary>
/// 首先創建一個自定義的類,讓它繼承TreeViewItem
/// </summary>
public class MyTreeItem :TreeViewItem  
{
    /// <summary>
    /// 自定義的一個字段 
    /// </summary>
    string data;

    public string Data
    {
        get 
        { 
            return data;
        }
        set 
        {
            data = value;
            //這個很重要,一定要將自定義的屬性添加到事件當中
            Changed("Data");
        }
    }

    //構造函數
    public MyTreeItem(string itemName, Sprite itemIcon, string itemData)
        : base(itemName, itemIcon)
    {
        this.data = itemData;
    }

}

2.在scene場景中操作如下:Canvas---UI--UIWidgets--COLLECTIONS---TreeView;
3.編寫創建樹形結構的代碼,代碼如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UIWidgets;
using System.IO;
public class MyCustomTreeTest : MonoBehaviour {
    //
    public TreeView m_tree;
    string[] itemNames = new string[] { "", "", "", "" };
    string[] names = new string[] { "趙二", "趙三", "趙四", "趙一", "王二", "王三", "王四", "李二", "李一", "錢二" };
    void Start () {
        //CreateByDefaultItemOne();
        CreateByDefaultIten();
    }


    //使用插件默認的DefaultIten來創建樹形結構
    public void CreateByDefaultItemOne()
    {
        //創建父節點
        ObservableList<TreeNode<TreeViewItem>> Nodes = new ObservableList<TreeNode<TreeViewItem>>();
        //創建第一層的節點
        for (int i = 0; i < itemNames.Length; i++)
        {
            ObservableList<TreeNode<TreeViewItem>> childNodes = new ObservableList<TreeNode<TreeViewItem>>();
            TreeViewItem item = new TreeViewItem(itemNames[i], null);
            TreeNode<TreeViewItem> node1 = new TreeNode<TreeViewItem>(item, childNodes);
            Nodes.Add(node1);

        }
        //賦值
        m_tree.Nodes = Nodes;

    }

    public void CreateByDefaultIten()
    {
        ObservableList<TreeNode<TreeViewItem>> nodesList_1 = new ObservableList<TreeNode<TreeViewItem>>();
        for (int i = 0; i < itemNames.Length; i++)
        {            
            ObservableList<TreeNode<TreeViewItem>> nodesList_2 = new ObservableList<TreeNode<TreeViewItem>>();        
            for (int j = 0; j < names.Length; j++)
            {
                //如果有第三層,就以此類推來寫就好
                //ObservableList<TreeNode<TreeViewItem>> nodesList_3 = new ObservableList<TreeNode<TreeViewItem>>();   
                //如果當前字符串中包含指定的字符串則返回TRUE
                if (names[j].Contains(itemNames[i]))
                {
                    //使用插件默認腳本
                    //TreeViewItem item_1 = new TreeViewItem(names[j], null);
                    //使用自定義腳本
                    var item_1 = new MyTreeItem(names[j]+j.ToString(), null, j.ToString());
                    TreeNode<TreeViewItem> node_2 = new TreeNode<TreeViewItem>(item_1, null);
                    //將符合條件的添加到對應的節點下
                    nodesList_2.Add(node_2);
                }
            }
            TreeViewItem item = new TreeViewItem(itemNames[i], null);
            TreeNode<TreeViewItem> nodes_1 = new TreeNode<TreeViewItem>(item, nodesList_2);
            nodesList_1.Add(nodes_1);
        }

        m_tree.Nodes = nodesList_1;
    }


    /// <summary>
    /// 點擊Item的方法
    /// </summary>
    /// <param name="index"></param>
    /// <param name="item"></param>
    public void OnSelect(int index, ListViewItem item)
    {
        TreeViewComponent componentItem = item as TreeViewComponent;
        //自定義的
        MyTreeItem customItem = componentItem.Item as MyTreeItem;
        Debug.Log("Selected: " + index + "; name: " + customItem.Name + "; value: " + customItem.Value + "; data: " + customItem.Data);
    }
    

}

4.將MyCustomTreeTest這個腳本拖放到Canvas下,將腳本中的m_tree賦值為第二步創建的樹形結構預制,點擊運行即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM