博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现一个简单实用的动态加载上千条目的UGUI模块
阅读量:5248 次
发布时间:2019-06-14

本文共 1498 字,大约阅读时间需要 4 分钟。

一、简要介绍

1、先看实现效果:

2、主要功能:将数据保存的一个list中,将部分数据进行展示。动态生成最小item数据的指定倍数据的列表,拖动时,可动态创建
3、提示:选择一次性加载出的条目数越多越平滑.
4、实现要求:win7/untiy5.0.0/一张图片/四个脚本
二、具体实现
1 、新建一个Scroll View ,在其上挂一个DynamicScrollView脚本,用于实现动态的加载给定的数据
2、创建好一个Image,做好适配,在其下放置一个text,用于显示string类型的数据
3、找一个对象池的脚本,给它个预制体,可以生成对应的实例,进行变换时,可以暂时保存起来
4、写一个Test脚本,将一个在一个list写入几十条数据,并在开始时触发,将数据传入到ScrollView中,启动模块
注意:(如果不想用对象池,将demo中的下面两个方法替换掉
    ///
    /// 创建出新的对象
    ///
    ///
    ///
    ///
    private void CreateItems(int num ,bool first,bool add)
    {
        for (int i = 0; i < num; i++)
        {
            GameObject item = GetImageItem(first,add);
            if (add)
            {
                //放置在尾部
                item.GetComponentInChildren().text = (tail).ToString();
                item.SendMessage("UpdateInfomation", itemList[tail++]);
                item.transform.SetAsLastSibling();
                scroll.content.localPosition -= cellhight * Vector3.up;
            }
            else {
                //放置在头部
                item.GetComponentInChildren().text = (--head).ToString();
                item.SendMessage("UpdateInfomation", itemList[head]);
                item.transform.SetAsFirstSibling();
                scroll.content.localPosition += cellhight * Vector3.up;
            }
        }
    }
    GameObject GetImageItem(bool firstTime,bool add)
    {
        if (firstTime)
        {
            GameObject go = Instantiate(itemPfb);
            go.transform.SetParent(parent, false);
            if (add)
            {
                items.Add(go);
            }
            else {
                items.Insert(0, go);
            }
            return go;
        }
        else {
            if (add)
            {
                head++;
                GameObject item = items[0];
                items.Remove(item);
                items.Add(item);
                return item;
            }
            else {
                tail--;
                GameObject item = items[items.Count - 1];
                items.Remove(item);
                items.Insert(0, item);
                return item;
            }
        }
    }
)

转载于:https://www.cnblogs.com/timesdaughter/p/6764126.html

你可能感兴趣的文章
html伪类元素居中,总结css伪类的几种常见操作
查看>>
html5 xdwlnjs cn,最近需要调用一个网站的js,但是发现是加密的,有大佬来解密下吗?...
查看>>
html字体样式源码,css文字样式中属性的介绍(附代码)
查看>>
html伪元素before占用高度,使用before伪元素出现的问题?
查看>>
mysql 编码php,php-MySQL的编码问题(和基础知识)
查看>>
基于matlab的prony方法实现,基于MATLAB的Prony方法实现
查看>>
php7 空对象,js 判断是否是空对象
查看>>
代替oracle dblink,oracle dblink
查看>>
linux中检测用户信息的命令是,Linux中系统状态检测命令
查看>>
凯撒字母加密算法c语言,C语言实现:凯撒密码算法(加密 与 解密)
查看>>
求矩形的最小值c语言,C语言复习---矩形法求定积分函数
查看>>
c语言找到串口,再次熟悉串口
查看>>
c语言删除数组重复元素并升序,C语言编程题: 编写函数,从一个已经排序的数组中删去某数后,该数组仍然有序....
查看>>
国二C语言大题评分,计算机二级C语言题型和评分标准
查看>>
android修改屏幕长宽比例,Android屏幕适配之修改density
查看>>
android map数据更新数据,Android的Databinding-数据、Map绑定
查看>>
微型计算机原理及应用 课程设计,《微型计算机原理及其应用》课程设计.docx
查看>>
用户输入查询与拼音首字母的结合,提高用户的操作体验
查看>>
bzoj 3996 最小割
查看>>
每天的记录1-padStart(); padEnd();Object.values();Object.entries()
查看>>