U3D滑动列表动态加载-新闻详情

U3D滑动列表动态加载


发布时间:2017-04-28责任编辑:朱明 浏览:2204


当我们坐一个需要展示很多条数据的显示界面时,如果一股脑全部出来展示可能会造成界面卡顿,这时候我们可以做一个动态加载,即先加载一部分,剩余的等翻到最后的时候在动态加载一部分,直到全部加载完成;这样可以就可以优化界面的加载速度了。不多说,上代码。

 

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

 

public class NewBehaviourScript : MonoBehaviour

{

    //滑动列表

    [SerializeField]

    ScrollRect _scrollView;

 

    //数据item根节点

    [SerializeField]

    Transform _testRoot;

 

    //数据item

    [SerializeField]

    GameObject _testItem;

 

    //记录现在显示的item的数量

    int _indexNum = 0;

 

    List<int> _dataList = new List<int>();

 

    //一次加载item数据

    int _onceCount = 20;

 

    // Use this for initialization

    void Start()

    {

        //ScrollRect添加监听

        _scrollView.onValueChanged.AddListener(ValueChangeCheck);

        //初始化List

        _dataList.Clear();

        for (int i = 0; i < 100; i++)

        {

            _dataList.Add(i);

        }

        //进入界面时加载一部分item,如果不足设定的好的一次加载的数据数目(_onceCount),则全部加载

        int firstcount = 0;

        if (_dataList.Count >= _onceCount)

        {

            firstcount = _onceCount;

        }

        else

        {

            firstcount = _dataList.Count;

        }

 

        for (int i = 0; i < firstcount; i++)

        {

            _indexNum++;

 

            GameObject go = GameObject.Instantiate<GameObject>(_testItem);

            go.transform.SetParent(_testRoot, false);

            testItem item = go.GetComponent<testItem>();

            if (item)

            {

                item.SetItem(_dataList[i]);

            }

            //打印list数据

            Debug.Log(_dataList[i]);

        }

    }

 

    public void ValueChangeCheck(Vector2 vec)

    {

        //打印滑动列表的滑动位置信息

        Debug.Log(vec);

        //vec.y < 0时表示滑动列表滑到最底部

        if (vec.y < 0)

        {

            //检查数据还有没加载出来的,继续加载,若全加载完毕则不执行操作

            if (_indexNum < _dataList.Count)

            {

                int addcount = 0;

                //剩余数据数量

                int leftcount = _dataList.Count - _indexNum;

                int indextemp = _indexNum;

                //如果剩余数量不足设定的好的一次加载的数据数目(_onceCount),则全部加载

                if (leftcount >= _onceCount)

                {

                    addcount = _onceCount;

                }

                else

                {

                    addcount = leftcount;

                }

                for (int i = 0; i < addcount; i++)

                {

                    _indexNum++;

 

                    GameObject go = GameObject.Instantiate<GameObject>(_testItem);

                    go.transform.SetParent(_testRoot, false);

                    testItem item = go.GetComponent<testItem>();

                    if (item)

                    {

                        item.SetItem(_dataList[indextemp + i]);

                    }

                    //打印list里本次加载的数据

                    Debug.Log(_dataList[indextemp + i]);

                }

            }

        }

    }

}

如图所示,滑动列表组件

U3D滑动列表动态加载1.png

 

 

      我在数据表里存了0-99int值,一开始进入界面时会加载一部分数据,查看打印窗口可以看到打印出了0-19。如图所示

U3D滑动列表动态加载2.png

 

      滑动滑动列表会持续输出滑动列表的位置信息。如图所示

 

U3D滑动列表动态加载3.png

 

      当滑动到最底部时,会再次加载一部分数据,查看打印窗口可以看到打印出了20-39。如图所示

U3D滑动列表动态加载4.png


 

继续滑动一直到全部加载完成,就不再此赘述了。



春秋工作室  供稿