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非常 ...
随机推荐
- apple iMac一体机 装双系统 实战! (Apple +Win 7 64bit)Good
原帖:http://group.zol.com.cn/1/641_485.html 需要准备工具:一个8GU盘X1 (或Win7 安装版系统盘) Windows 7 pro 64bit 位 ISO 文 ...
- canvas的api
Canvas API(画布)用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitmap).使用前,首先需要新建一个canvas网页元素. 1 2 3 ...
- MySQL数据库字符集由utf8修改为utf8mb4一例
对于mysql 5.5 而言,如果不设定字符集,mysql默认的字符集是 latin1 拉丁文字符集: 为了统一管理和应用开发的方便,一般都会统一将操作系统,客户端,数据库各方面的字符集都设置为 ut ...
- cocopods卸载、安装、重装等问题解决(转)
今日在升级af库的时候,头脑发热把cocopods给卸载了,然后重装就出现了一些问题,主要是Mac ox s升级至10.11之后,好多命令都和以前不一样了,现在重新总结其安装步骤,如下: 一.全新安装 ...
- Android Launcher拖拽事件详解【android4.0--Launcher系列二】
AndroidICS4.0版本的launcher拖 拽的流程,基本和2.3的相似.就是比2.3写的封装的接口多了一些,比如删除类的写法就多了个类.等等.4.0的改变有一些,但是不是特别大.这个月一 直 ...
- HTML5学习笔记 Web存储
HTML5 web存储,一个比cookie更好的本地存储方式. 什么是html5 Web存储 使用HTML5可以在本地存储用户的浏览器数据. 早些时候,本地存储使用的是cookies.但是Web存储需 ...
- c# 隐藏Tab控件的标签
public void HideTabcontrolLabel(TabControl tabControl1) { tabControl1.Appearance = TabAppearance.Fla ...
- mybatis的#和$的差别
在项目中假设使用mybatis保存形如"1,2,3"这种字符串.你须要使用"#"号取值.假设使用$符号会报错, 假设是查询形如"id in (1,2, ...
- 点滴积累【JS】---JS实现仿百度模糊搜索效果
效果: HTML代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="In ...
- ubuntu下安装自动补全YouCompleteMe
一.安装预备软件.#vim要带python2.7的支持,curl是下载插件必须用到的软件,还有git apt install vim-nox-py2 curl git #安装python头文件 apt ...