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 = ; i < ItemList.Count; i++)
- {
- if (ItemList[i].ParentId == "")
- {
- 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 == )
- {
- dfPanel NodePanel = child.GetComponent<dfPanel>();
- NodePanel.Find("Sprite").GetComponent<dfSprite>().IsVisible = false;
- }
- }
- }
- public void AddChildNodes(NodeMessage message)
- {
- for (int i = ; 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, );
- message.NodeList.Add(newNode);
- AddChildNodes(newNode);
- treeNode.IsVisible = false;
- }
- }
- }
- public void tubiaoOnClick(bool isShow, string tag, List<NodeMessage> nodelist)
- {
- for (int i = ; i < ItemList.Count; i++)
- {
- if (ItemList[i].Id == tag)
- {
- SelectNodeList(isShow, nodelist);
- }
- }
- }
- void SelectNodeList(bool isShow, List<NodeMessage> nodelist)
- {
- for (int j = ; 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().InnerText, xml.Item().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></id>
- <parentid></parentid>
- </node>
- <node name="Node1 - 1">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node1 - 1 - 1">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node1 - 1 - 2">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node1 - 2">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node1 - 2 - 1">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node1 - 2 - 2">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node2">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node2 - 1">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node2 - 2">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node2 - 2 - 1">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node2 - 2 - 2">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node2 - 3">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node3">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node3 - 1">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node3 - 1 - 1">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node3 - 1 - 2">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node3 - 2">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node3 - 2 - 1">
- <id></id>
- <parentid></parentid>
- </node>
- <node name="Node3 - 2 - 2">
- <id></id>
- <parentid></parentid>
- </node>
- </projects>
Unity基于DFGUI的TreeView设计的更多相关文章
- SOA实践之基于服务总线的设计
在上文中,主要介绍了SOA的概念,什么叫做“服务”,“服务”应该具备哪些特性.本篇中,我将介绍SOA的一种很常见的设计实践--基于服务总线的设计. 基于服务总线的设计 基于总线的设计,借鉴了计算机内部 ...
- 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)
郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...
- 基于MATLAB2016b图形化设计自动生成Verilog语言的积分模块及其应用
在电力电子变流器设备中,常常需要计算发电量,由于电力电子变流器设备一般是高频变流设备,所以发电量的计算几乎时实时功率的积分,此时就会用到一个积分模块.发电量计算的公式如下:Q=∫P. FPGA由于其并 ...
- 基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集【转】
转自:http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_webcam_lab1.html 一直想把USB摄像头接到Zedboard上,搭建 ...
- 基于FPGA的DDS设计(一)
最近在学习基于FPGA的DDS设计,借此机会把学习过程记录下来,当作自己的学习笔记也希望能够帮助到学习DDS的小伙伴. DDS(Direct Digital Synthesizer)直接数字合成器,这 ...
- atitit.基于虚拟机的启动器设计 --java 启动器 java生成exe
atitit.基于虚拟机的启动器设计 --java 启动器 java生成exe exe4j vs nativej 1. step1读取配置文件 1 1.1. regular mode . ...
- 基于WPF系统框架设计(5)-Ribbon整合Avalondock 2.0实现多文档界面设计(二)
AvalonDock 是一个.NET库,用于在停靠模式布局(docking)中排列一系列WPF/WinForm控件.最新发布的版本原生支持MVVM框架.Aero Snap特效并具有更好的性能. Ava ...
- unity 基于scrollRect实现翻页显示
unity 基于scrollRect实现翻页显示,并定为到某一页,而不是某一页的中间方法(第二个脚本采用实际位置计算,并在update里实现平滑过渡): 组场景时,经常需要获取鼠标(或者点击)开始结束 ...
- 基于libuv的TCP设计(三)
基于libuv的TCP设计(一) 基于libuv的TCP设计(二) 一.第二版本的libuv_tcp已经基本可以使用.不会出错与崩溃现象,支持几百路客户端同时连接.可是有一缺陷就占用CPU非常 ...
随机推荐
- spring作用域(Spring Bean Scopes Example)
http://docs.spring.io/spring/docs/2.0.x/reference/beans.html#beans-factory-scopes In Spring, bean sc ...
- 搭建ssm+maven环境遇到的问题
1. @RunWith(SpringJUnit4ClassRunner.class) gives error 在使用junit测试过程中 2.com.google.gson.JsonIOExcepti ...
- Linux环境下GNU, GCC, G++编译器(转)
一,GNU GNU是“GNU 's Not Unix”的递归缩写, Stallman宣布GNU应当发音为Guh-NOO(革奴)以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new ...
- 〖Linux〗(2013.08.02)使用ctag+cscope查看Android源代码
1. 安装ctags和cscope sudo apt-get install -y exuberant-ctags cscope 2. vimrc中的配置 """&quo ...
- 转载:【Linux+windows】PHP5.5安装PHPRedis扩展
首先,你必须安装了 Redis服务器,然后才能安装php-redis扩展,就像先安装mysql,然后再将php-mysql扩展安装并引入(区别是:php-redis扩展插件php没有自带,php-my ...
- centos 配置 samba 与windows共享文件夹
yum install samba /etc/samba/smb.conf directory mask = 0777 ← 指定新建目录的属性(以下4行) force directory mode = ...
- Altium PCB布局时快速摆放元件的技巧
http://www.openedv.com/posts/list/45238.htm pcb窗口:工具--->交叉选择模式
- 跨服务器查询信息的sql
--跨服务器查询信息的sql: select * from openrowset( 'SQLOLEDB', '192.168.1.104'; 'sa'; '123.com',[AutoMonitorD ...
- ctags简明用法
1.安装: sudo apt install ctags 2.生成tags文件: //进入目标目录 ctags -R . 3.在vim中设置tags的绝对目录,这样就可以在任何子目录使用了. :set ...
- 如何运行Struts2官网最新Demo?
本篇将讲述下如何运行官网当前最新Struts2.5.10.1 版本的Demo. Struts2 官网:http://struts.apache.org/ 0x00 Demo下载 Struts2 官网2 ...