对UGUI的GridLayoutGroup组件进行拓展
来源:互联网 发布:导航源码 编辑:程序博客网 时间:2024/06/15 21:46
最在在工作过程经常会使用到Grid Layout Group 组件,在使用的过程中发现对Grid Layout Group应用都是差不多的,主要的区别是显示的Item内容不同。所以就想把Item抽离成BaseItem,然后在用MyGrid继承Grid Layout Group。代码如下:
BaseItem
using UnityEngine;using System.Collections;public abstract class BaseItem : MonoBehaviour { /// <summary> /// 给Item传递数据 /// </summary> /// <param name="date"></param> public abstract void setDate(object date);}
MyGrid
using UnityEngine;using System.Collections;using UnityEngine.UI;public class MyGrid : GridLayoutGroup { /// <summary> /// 保存你要显示的item的类名 /// </summary> private string itemName; public void Init(string name) { itemName = name; } /// <summary> /// 把数据传递给item /// </summary> /// <typeparam name="T">操作item的业务类</typeparam> /// <param name="value">item的业务数据</param> public void SetValue<T>(object[] value) { //隐藏grid下的item HideChild(this.gameObject); //如果grid下的item数量小于数据要显示的item,则生成item if (gameObject.transform.childCount < value.Length) { for (int i = gameObject.transform.childCount; i < value.Length; i++) { GameObject item = CreateChild(i); item.AddComponent(typeof(T)); } } //把数据赋值给每个item for (int i = 0; i < value.Length; i++) { GameObject go = transform.FindChild((i + 1).ToString()).gameObject; BaseItem item = go.GetComponent(typeof(T)) as BaseItem; go.SetActive(true); item.setDate(value[i]); Debug.Log(item.name); } } /// <summary> /// 生成子对象 /// </summary> /// <param name="index"></param> /// <returns></returns> private GameObject CreateChild(int index) { //这里为里方便,我直接从Resources加载 GameObject go = Resources.Load(itemName) as GameObject; GameObject item = Instantiate(go); item.name = (index + 1).ToString(); item.transform.parent = this.gameObject.transform; item.SetActive(false); return item; } /// <summary> /// 隐藏所有子对象 /// </summary> /// <param name="go"></param> private void HideChild(GameObject go) { for (int i = 0; i < go.transform.childCount; i++) { GameObject obj = go.transform.FindChild((i + 1).ToString()).gameObject; obj.SetActive(false); } }}下面是具体的测试内容
Item1:item的业务类
using UnityEngine;using System.Collections;public class Item1 { public string name; public string age; public string gender;}
BtnItem:继承BaseItem
using UnityEngine;using System.Collections;using System;using UnityEngine.UI;public class BtnItem : BaseItem{ private Text NameText; private Text AgeText; private Text GenderText; private Button btn;void Awake(){NameText = this.gameObject.transform.FindChild("NameText").gameObject.GetComponent<Text>();AgeText = this.gameObject.transform.FindChild("AgeText").gameObject.GetComponent<Text>();GenderText = this.transform.FindChild("GenderText").gameObject.GetComponent<Text>();btn = this.transform.FindChild("btn").gameObject.GetComponent<Button>();} void Start() { } public override void setDate(object date) { Item1 item = (Item1)date;//Debug.Log (item.name);//Debug.Log (item.age);//Debug.Log (item.gender); NameText.text = item.name; AgeText.text = item.age + ""; GenderText.text = item.gender; btn.onClick.AddListener(OnClick); } private void OnClick() { Debug.Log("我是item:" + this.name); }}
Test:测试类
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.IO;public class Test : MonoBehaviour { List<Item1> list = new List<Item1>();// Use this for initializationvoid Start () { GetValue(); //对Grid进行初始化 gameObject.GetComponent<MyGrid>().Init("Item1"); //对grid进行赋值 gameObject.GetComponent<MyGrid>().SetValue<BtnItem>(list.ToArray()); }// Update is called once per framevoid Update () {}/// <summary>/// 获取测试数据/// </summary> private void GetValue() { string str = Resources.Load("T1").ToString(); string[] strs = str.Split('\n'); for (int i = 0; i < strs.Length; i++) { string[] data = strs[i].Split('|'); Item1 item = new Item1(); item.name = data[0]; item.age = data[1]; item.gender = data[2]; list.Add(item); } }}
1 0
- 对UGUI的GridLayoutGroup组件进行拓展
- unity3d Ugui 5.x学习GridLayoutGroup 脚本创建预设并改变外面容器的大小及单例模式
- UGUI的Dropdown组件
- 对现有控件进行拓展
- 【Unity3D】UGUI组件的监听
- 对二维数据进行边界拓展
- 对现有的控件进行拓展,以TextView为例,为文本加彩虹渐变效果
- android群英传笔记——对现有控件进行拓展(闪动的文字效果)
- Android群英传--对现有控件进行拓展(动态的文字闪动效果)
- Q146:PBRT-V3,对系统进行拓展(以添加一个新的Integrator为例)
- Unity3D 2D入门 —— 关于 UGUI,记录下GridLayoutGroup
- ugui组件添加事件处理的方法
- Unity3D-UGUI的Text组件渐变效果
- flex中的文本组件,对里面的文本进行控制
- Validate对select组件不进行验证的一种解决方法
- 【UGUI】UGUI 常用布局组件
- 拓展自定义下拉缩放header的组件PullZoomView,增加对listView的下拉刷新和上拉更多
- Android View之对现有控件进行拓展实例
- 关于转义字符 \r,\n,\r\n 的区别
- 《C++实现数据结构》:堆栈
- 乘法口诀表
- PTA 一 天梯地图
- QGis二次开发 -- 源码编译终极篇
- 对UGUI的GridLayoutGroup组件进行拓展
- Python核心编程---读书笔记:第7章~第13章
- 索引设计的一些原则
- MFC modBus 读写串口实例
- 字符串转为整数或浮点数
- C++学习4:宏定义#define与常量const
- 团体程序设计天梯赛-练习集 L3-011. 直捣黄龙 最短路 dijkstra 解题报告
- TypeScript设计模式之备忘录、命令
- 杂项事务处理时,报错:事务处理日期不能是过去日期