在Unity3D项目中,我们或多或少都需要显示大量列表数据。随着列表数据的增多,UGUI自带的循环似乎已经不能满足我们的需求了。当然很多人说只需要拆分成分页就行了,当然这也是一种办法。我最近在做的项目中,就是没有使用分页,我把以前的代码魔改了一下,直接显示无限循环列表,在大数据量面前,目前还是比较稳定的,起码目前满足了我们项目的需求。目前支持自定义格子数,支持增删改查,大量数据插入并不会卡顿。
一、先看看效果吧
二、运行环境
1.Unity 2018.4.0f1和Visual Studio Commnity 2019
三、代码结构
1.文件夹Infinity就是无限循环用到的一些脚本
2.文件夹BagWindow是测试脚本
3.Hierarchy视图,maxCount是初始化的物品数量,可随意填写。
4.Content要挂载InfinityList脚本
InfinityList:无限循环核心代码
(1)初始化以及启动 在BagWindow.cs中
void Start()
{
Application.targetFrameRate = 45;
InitConfigGoods(); //1.初始化物品配置
InitGetServerGoods();//2.模拟获得服务器物品
InitCompnent(); //3.初始化组件
InitData(); //4.初始化数据
}
(2)在BagWindow.cs中 InfinityList的初始化,其中InitSellItemClickEvent是点击事件,this.InitSellCellDataEvent是初始化格子数
infinity = transform.Find("ScrollPanel/Viewport/Content").GetComponent<InfinityList>();
infinity.SetInitClickItem(this.InitSellItemClickEvent, this.InitSellCellDataEvent);
(3)BagWindow.cs 填充列表关键代码 关键函数 infinity.InitFirstDataProvider
public void ResetSellPkgItemList()
{
//插入一个初始的标记
//sellPkgItemList.Add(new SellPkgItem());
//开始初始化数据
List<IncludeData> currentList = new List<IncludeData>();
//开始遍历
for (int i = 0; i < showGoods.Count; i++)
{
ConfigGoods cfGoods = GoodsManager.GetInstance().GetConfigGoodsById( showGoods[i].goodsId );
IncludeData inData = new IncludeData(false, cfGoods.type, i, showGoods[i]);
currentList.Add(inData);
}
infinity.InitFirstDataProvider(currentList, false);
UpdateCountText();
}
5.子项要挂载Button和DynamicInfinityItem
DynamicInfinityItem:是每个子项保存数据的脚本
6.下载地址
链接:https://pan.baidu.com/s/16DEoRHDk4wVN8i5mXhYCbg
提取码:ttm3