Unity3D 无限滚动实现动态加载排行榜

前言

    在游戏开发中,排行榜算是最普遍的功能了,每一款游戏都有多个数值的排行榜来刺激玩家消费,在游戏开发中,一般短链接游戏的排行榜是先从服务器中下载下来Excel文件再通过读取实现的,强联网的游戏也是在服务器中解析Excel文件在将数据显示到客户端的,一般一个排行榜都会显示200条左右的数据,如何通过一个ScrollView来显示200条数据,在一个ScrollView里面列出200条数据肯定是不可取的。如何实现根据Excel里面行数来动态读取显示呢。

    从上图可以看出,在右侧的Grid下只有10个自物体,但是在运行时,是循环向下叠加,或者循环向上显示的,这样就可以通过这种方式展示排行榜中上百条数据了

轮子引用

    这个功能主要是由两部分结合,分别是:无限滚动技术和解析Excel配置文件,在这里感谢雨松MOMO大大,在这里引用了他的解析Excel技术,文章链接在这里:解析Excel,还有简书里一位大佬的无限滚动技术,两篇文章对技术的讲述和解析都非常的棒,感谢两位大佬造的轮子。

实现

有了解析Excel和无限滚动技术实现就很简单了。只需要这样一个脚本即可实现该排行榜功能。


using UnityEngine;
using Excel;
using System.IO;
using UnityEngine.UI;
using System.Data;
public class RankingList : MonoBehaviour {

    InfinityGridLayoutGroup infinityGridLayoutGroup;

    private int amount = 20;

	// Use this for initialization
	void Start () {
        infinityGridLayoutGroup = transform.Find("Panel_Test/Panel_Grid").GetComponent<InfinityGridLayoutGroup>();
        
        infinityGridLayoutGroup.updateChildrenCallback = UpdateChildrenCallback;
        infinityGridLayoutGroup.SetAmount(amount);

    }
	
    void UpdateChildrenCallback(int index,Transform trans)
    {
        Text text = trans.Find("Text").GetComponent<Text>();

        FileStream stream = File.Open(Application.dataPath + "/UserLevel.xlsx", FileMode.Open, FileAccess.Read);
        IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
        DataSet result = excelReader.AsDataSet();

        int columns = result.Tables[0].Columns.Count;
        int rows = result.Tables[0].Rows.Count;
        amount = rows;
        Debug.Log(amount);
        string tmpwrite = "";

        for (int i = 0; i < columns; i++)
        {
            string level = result.Tables[0].Rows[index][i].ToString();
            tmpwrite += level;
        }
        text.text = tmpwrite;
        text.fontSize = 20;
    }
}


猜你喜欢

转载自blog.csdn.net/Htlas/article/details/80024180
今日推荐