unity循环滚动列表_【unity游戏开发】LoopScrollRect组件

引言

对于背包界面,排行榜列表,聊天消息,等有大量的UI列表的界面,
常规做法是为每一条数据生成一个格子,在数据量越大的情况下,会生成越来越多的Gameobject,引起卡顿。

这个组件就是为了优化这个问题诞生的,

就以联盟宝箱为例子,联盟宝箱最多可以容纳300个宝箱,如果一下子生成300个,整个界面就会卡到爆炸,

这个组件的做法是就生成视图可见的个数,然后拖动的时候循环复用,

比如向下拖动,上面的item看不见了,就挪到下面复用。

8d1aa4e77f5ba3678bbb244e0dc3b76b.png

lua层使用

/// <summary>
/// 初始化循环滚动
/// </summary>
/// <param name="loopItems">要生成的item列表</param>
/// <param name="curIndex">第几个item作为列表顶部</param>
/// <param name="loopMax">循环列表生成最大个数</param>
/// <param name="listener">注册拖动回调,给item赋值</param>
/// <param name="isLocation">第二次调用的时候,是否复位,true的话会复位到原来的位置</param>
public virtual void InitLoop(RectTransform[] loopItems, int curIndex, int loopMax, System.Action<int, int> listener, bool isLocation)

一、在预制上挂LoopScrollRect组件

7e95de38f5f358eb00e60a110374d855.png

二、导出节点

e83c1f04016c28dfcde23de95a1f1032.png

三、lua层注册调用接口InitLoop,初始化组件,注册滑动事件

self.Scroll:InitLoop(childItems, 0, giftNum, handler(self, self.OnRefreshGiftItem),toTop)

四、滑动事件回调会将现有item对象数据初始化,

并且在每次滑动的时候回调事件,初始化item,

回调传回的参数是对象索引,所以需要我们记录item对象列表:self._giftItems和item对应的数据self._giftList ,用来初始化

//C# 的索引是从0开始的,lua的索引是从1开始的,所以要+1
function AllianceGiftView:OnRefreshGiftItem(objIdx, dataIdx)
    local giftData = self._giftList[dataIdx + 1]
    local giftItem = self._giftItems[objIdx + 1]
    self._giftItemDic[giftData:GetGiftID()] = giftItem
    giftItem:SetInfo(giftData)
end

源码学习:

魔改版源码:

https://github.com/Aver58/Tools/tree/master/UnityProject/Assets/Scripts/Component

想要更深入了解的可以参考开源源码:

qiankanglai/LoopScrollRect

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值