Unity+Slua实现游戏常用UI组件(零)——滚动复用组件基类

设计目的

  • 带遮罩(Mask)的滚动(ScrollRect)组件都有一个共同的优化点,就是创建的元素数量只需要满足遮罩的显示大小即可,比如遮罩内最多能显示6个元素的滚动组件,无论需要显示的数据量有多少,只需要创建6个元素即可(如下图)我们要处理的,就是在滚动的过程中不断地复用已有的元素。

只创建满足遮罩显示范围的元素

基类定义

  • 结合之前写过的滚动组件:滚动表格组件翻页组件树形组件
    可以把复用的逻辑提取为——把滚动组件的所有元素按显示顺序生成对应的显示下标,计算遮罩内显示下标的范围,并生成显示范围内的元素,当滚动时,判断显示下标的范围是否发生变化,如果是,则对显示范围内的元素进行更新
    下面是这部分逻辑的代码:
function LBaseScroll:_OnValueChanged(value)
    ...
    if self.orderStartIndex ~= self:_GetOrderStartIndex() or
        self.orderEndIndex ~= self:_GetOrderEndIndex() then
        self:_Update()
    end
end
  • 为何要用显示下标,而不用数据本身的下标,因为显示下标与元素的数据下标是不一致的
    比如一个水平滚动,元素水平排布的2行2列翻页组件,黄色格子内是数据的实际下标,红色数据为显示下标,显示下标的排序方式与滚动的方向相关
    在这里插入图片描述

注意事项

  • 滚动复用组件基类命名为LBaseScroll,继承LBaseScroll的父类一般需要重写三个接口
    获取遮罩范围内的起始显示下标:_GetOrderStartIndex()
    获取遮罩范围内的结束显示下标:_GetOrderEndIndex()
    把显示下标转换为数据下标:_OrderIndexToIndex()

项目地址

  • git地址(LBaseScroll类)
    Unity版本:5.6.6
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值