实现一个简单实用的动态加载上千条目的UGUI模块

一、简要介绍

1、先看实现效果:

实现一个简单实用的动态加载上千条目的UGUI模块
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;
            }
        }
    }
)