前言
在游戏开发中,排行榜算是最普遍的功能了,每一款游戏都有多个数值的排行榜来刺激玩家消费,在游戏开发中,一般短链接游戏的排行榜是先从服务器中下载下来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; } }