1. 程式人生 > >Unity3D 無限滾動實現動態載入排行榜

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;
    }
}