zoukankan      html  css  js  c++  java
  • 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赋值为第二步创建的树形结构预制,点击运行即可

  • 相关阅读:
    看完两本书
    今夜,有点难过
    学习总结
    杂谈改变个人习惯
    最近一个月的工作学习总结
    lab项目之一阿森纳赛事指南客户端版本
    工资类程序数据库处理讨论 [数据加载(二)]
    SQL数值倍率实现问题....
    想用GDI+2.0做设计器,但在实现过程中遇到大麻烦
    这几天做工资类程序郁闷了,想写点东西理一下思路
  • 原文地址:https://www.cnblogs.com/nanyang0310/p/9110136.html
Copyright © 2011-2022 走看看