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賦值為第二步創建的樹形結構預制,點擊運行即可