• Unity基于DFGUI的TreeView设计


    using UnityEngine;
    using System.Collections;
    
    public class Item 
    {
    
        public string Id;
    
        public string Name;
    
        public string ParentId;
    
        public Item(string name, string id, string parentid)
        {
            this.Name = name;
            this.Id = id;
            this.ParentId = parentid;
        }
    
    }
    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class NodeMessage : MonoBehaviour
    {
    
        public string Tag;
    
        public List<NodeMessage> NodeList;
    
    
    }
    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using System.Xml;
    
    public class TreeNode : MonoBehaviour
    {
        public GameObject Panel;
        public List<Item> ItemList;
        dfScrollPanel scrollpanel;
    
        void Start()
        {
            scrollpanel = this.GetComponent<dfScrollPanel>();
            ReadXML();
            AddNodes();
        }
    
        void AddNodes()
        {
            for (int i = 0; i < ItemList.Count; i++)
            {
                if (ItemList[i].ParentId == "0")
                {
                    var treeNode = scrollpanel.AddPrefab(Panel);
                    var newNode = treeNode.GetComponent<NodeMessage>();
                    newNode.Tag = ItemList[i].Id;
                    treeNode.Find("Sprite").GetComponent<dfSprite>().SpriteName = "ArrowNormal";
                    treeNode.Find("Node").GetComponent<dfButton>().Text = ItemList[i].Name;
                    AddChildNodes(newNode);
                }
            }
            foreach (Transform child in scrollpanel.transform)
            {
                var TreeNode = child.GetComponent<NodeMessage>();
                if (TreeNode.NodeList.Count == 0)
                {
                    dfPanel NodePanel = child.GetComponent<dfPanel>();
                    NodePanel.Find("Sprite").GetComponent<dfSprite>().IsVisible = false;
                }
            }
        }
    
        public void AddChildNodes(NodeMessage message)
        {
            for (int i = 0; i < ItemList.Count; i++)
            {
                if (ItemList[i].ParentId == message.Tag)
                {
                    var treeNode = scrollpanel.AddPrefab(Panel);
                    var newNode = treeNode.GetComponent<NodeMessage>();
                    newNode.Tag = ItemList[i].Id;
                    treeNode.Find("Node").GetComponent<dfButton>().Text = ItemList[i].Name;
                    treeNode.Find("Sprite").GetComponent<dfSprite>().SpriteName = "ArrowNormal";
                    var parentTransform = message.GetComponent<dfPanel>().Find("Panel").transform;
                    treeNode.Find("Panel").transform.localPosition = new Vector2(parentTransform.localPosition.x + 0.1f, 0);
                    message.NodeList.Add(newNode);
                    AddChildNodes(newNode);
                    treeNode.IsVisible = false;
                }
            }
        }
    
        public void tubiaoOnClick(bool isShow, string tag, List<NodeMessage> nodelist)
        {
            for (int i = 0; i < ItemList.Count; i++)
            {
                if (ItemList[i].Id == tag)
                {
                    SelectNodeList(isShow, nodelist);
                }
            }
        }
    
        void SelectNodeList(bool isShow, List<NodeMessage> nodelist)
        {
            for (int j = 0; j < nodelist.Count; j++)
            {
                dfPanel NodePanel = nodelist[j].GetComponent<dfPanel>();
                var node = NodePanel.GetComponent<NodeMessage>();
                if (isShow == true)
                {
                    NodePanel.IsVisible = true;
                }
                else
                {
                    tubiaoOnClick(isShow, node.Tag, node.NodeList);
                    NodePanel.IsVisible = false;
                    NodePanel.Find("Sprite").GetComponent<dfSprite>().SpriteName = "ArrowNormal";
                    NodePanel.Find("tubiao").GetComponent<TuBiao>().isShow = false;
                    
                }
            }
        }
    
        void ReadXML()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(Application.dataPath + @"TreeView.xml");
            XmlElement rootElem = doc.DocumentElement;
            XmlNodeList itemlist = rootElem.GetElementsByTagName("node");
    
            ItemList = new List<Item>();
            foreach (XmlNode xn1 in itemlist)
            {
                XmlElement xe = (XmlElement)xn1;
                XmlNodeList xml = xe.ChildNodes;
                Item item = new Item(xe.GetAttribute("name").ToString(), xml.Item(0).InnerText, xml.Item(1).InnerText);
                ItemList.Add(item);
            }
    
        }
    
    }
    using UnityEngine;
    using System.Collections;
    
    public class TuBiao : MonoBehaviour
    {
    
        private TreeNode TreeNode;
        dfSprite Sprite;
        NodeMessage Message;
        public bool isShow = false;
    
        void Start()
        {
            Sprite = this.transform.FindChild("Sprite").GetComponent<dfSprite>();
            TreeNode = this.transform.parent.parent.parent.GetComponent<TreeNode>();
            Message = this.transform.parent.parent.GetComponent<NodeMessage>();
        }
    
        void OnClick()
        {
            if (Sprite.SpriteName == "ArrowNormal")
                Sprite.SpriteName = "ArrowUnfold";
            else
                Sprite.SpriteName = "ArrowNormal";
            isShow = !isShow;
            TreeNode.tubiaoOnClick(isShow, Message.Tag, Message.NodeList);
    
        }
    
    }

    XML如下:

    <?xml version="1.0" encoding="utf-8"?>
    <projects>
      <node name="Node1">
        <id>1</id>
        <parentid>0</parentid>
      </node>
      <node name="Node1 - 1">
        <id>2</id>
        <parentid>1</parentid>
      </node>
      <node name="Node1 - 1 - 1">
        <id>3</id>
        <parentid>2</parentid>
      </node>
      <node name="Node1 - 1 - 2">
        <id>4</id>
        <parentid>2</parentid>
      </node>
      <node name="Node1 - 2">
        <id>5</id>
        <parentid>1</parentid>
      </node>
      <node name="Node1 - 2 - 1">
        <id>6</id>
        <parentid>5</parentid>
      </node>
      <node name="Node1 - 2 - 2">
        <id>7</id>
        <parentid>5</parentid>
      </node>
      <node name="Node2">
        <id>8</id>
        <parentid>0</parentid>
      </node>
      <node name="Node2 - 1">
        <id>9</id>
        <parentid>8</parentid>
      </node>
      <node name="Node2 - 2">
        <id>10</id>
        <parentid>8</parentid>
      </node>
      <node name="Node2 - 2 - 1">
        <id>11</id>
        <parentid>10</parentid>
      </node>
      <node name="Node2 - 2 - 2">
        <id>12</id>
        <parentid>10</parentid>
      </node>
      <node name="Node2 - 3">
        <id>13</id>
        <parentid>8</parentid>
      </node>
      <node name="Node3">
        <id>14</id>
        <parentid>0</parentid>
      </node>
      <node name="Node3 - 1">
        <id>15</id>
        <parentid>14</parentid>
      </node>
      <node name="Node3 - 1 - 1">
        <id>16</id>
        <parentid>15</parentid>
      </node>
      <node name="Node3 - 1 - 2">
        <id>17</id>
        <parentid>15</parentid>
      </node>
      <node name="Node3 - 2">
        <id>18</id>
        <parentid>14</parentid>
      </node>
      <node name="Node3 - 2 - 1">
        <id>19</id>
        <parentid>18</parentid>
      </node>
      <node name="Node3 - 2 - 2">
        <id>20</id>
        <parentid>18</parentid>
      </node>
    </projects>
  • 相关阅读:
    PHP安装swoole
    linux系统占用问题排查
    使用PHP实现对Excel的文本替换操作
    java类 static成员变量 以及方法都会被子类继承吗
    FragmentTransaction的commit和commitAllowingStateLoss的区别
    【git】.gitignore文件
    java中lambda表达式双冒号::的使用
    java虚拟机常见的参数笔记
    Android 形状绘制 —— shape详解
    Git版本回退 初探
  • 原文地址:https://www.cnblogs.com/jiangshuai52511/p/6485074.html
Copyright © 2020-2023  润新知