Unity3D 無限滾動實現動態載入排行榜
阿新 • • 發佈:2019-01-31
前言
在遊戲開發中,排行榜算是最普遍的功能了,每一款遊戲都有多個數值的排行榜來刺激玩家消費,在遊戲開發中,一般短連結遊戲的排行榜是先從伺服器中下載下來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; } }