回到总的滑动条,管理逻辑类,是挂载在最外层的,滑动条Scroll View上,其中OffsetY是子节点之间的,偏移数值

对应的具体逻辑,除了子节点之间偏移OffsetY,还有子节点的实体高度_itemHeight,对应父物体_content,而_items和_models分别是,子节点对应的实体逻辑类,和数据逻辑类,队列容器

这里的数据获取,是从Resources的Icon图片目录,初始化 LoopListItemModel 对象,加到对应的队列容器即可

对应资源列表

通过滑动条的高度,除以,单个子节点的高度加上偏移值,得到最多可以容纳,多少个Item子节点实体,参考Mathf.CeilToInt

初始化子节点,是SpwanItem相关逻辑,其中num是上述函数GetShowItemNum得到的,该滑动条,最大可实例化出子节点总数; 基于总数遍历,实例化游戏实体; 子节点实体,添加LoopListItem组件,再把GetData作为AddGetDataListener的传参,赋值给对应的Func委托; 调用加LoopListItem的初始化函数,完成实体初始化,再加到队列容器即可;

对应的赋值接口

其中GetData函数接口,对应的具体逻辑,是先判断是否在,数据总合集中,如果不在,就实例化新的LoopListItemModel; 如果在,就根据索引,完成数据调用即可

这里的返回,是可以,配合之前提及过的合法性校验

设置子节点父物体_content的sizeDelta尺寸

对应的获取、赋值位置

回到滑动条管理类的,游戏初始函数Start,都会调用,前面提及解析的各个函数,获取到总的,装备数据容器合集,对父物体_content、子节点高度itemHeight各个组件进行赋值; 其中itemPrefab是单个子节点的组件,通过资源加载接口Resources.Load函数,加载对应的预制体; 实例化子节点,是调用上述提及的,SpwanItem函数,完成实例化多个子节点即可; 然后就是调用SetContentSize,设置父节点content尺寸; 添加UGUI滑动条滚动的事件监听,绑定ValueChange函数; 这个函数,是遍历子物体的LoopListItem组件,随着滑动条滚动,调用OnValueChange函数即可;

子节点,对应滑动条滚动,触发的OnValueChange函数,主要是随着滑动条快速滚动,更新当前,对应滑动条的,开始id和结束id,参考out和ref之间的区别

更新id范围的函数,开始id,是通过Mathf.FloorToInt函数,配合父物体的锚点坐标,和节点高度+偏移,相除得到; 而结束id,就是开始id,加上实例化出来的子节点总数-1,完成赋值;

随着滑动条滑动,当前id会小于开始id,或者超过结束id,分别是对应,向上滑动,和向下滑动; 针对不同的情况,计算不同的偏移offset,再调用之前提及解析的,ChangeId函数修改当前id即可; 进而实现,无限滚动列表的表现效果,实际上是,通过id的改变,触发不同的图片、装备数据修改即可;

id默认是私有变量,为了测试,先临时改成公有变量

运行游戏,随着滑动条的滚动,子节点对应的id,也会跟随改变,进而控制,不同的图片和装备信息,修改