UGUI实现ScrollView无限滚动

这篇博客介绍了如何在Unity中使用UGUI实现ScrollView的下拉无限滚动效果。作者指出,关键在于利用Queue管理Cell,并在用户上滑时将顶部Cell移到底部,模拟无限滚动。同时,通过HeadNum和TailNum记录显示数据的段落,确保数据的正确刷新。博客附带了完整的实现代码。
摘要由CSDN通过智能技术生成

       抽空做了一个UGUI的无限滚动的效果。只做了一半(向下无限滚动)。网上也看了很多教程,感觉还是按照自己的思路来写可能比较好。搭建如下:

ScrollView图片

content节点不添加任何组件。布局组件默认是会重新排版子节点的,所以如果子节点的位置变化,会重新排版,不能达到效果。Size Fitter组件也不加,自己写代码调整Size大小(不调整大小,无法滑动)。

       最主要的实现过程就是用Queue来搬运Cell。在向下滚动的过程中(鼠标上滑),顶部滑出View Port的Cell被搬运到底部续上。这点类似于Queue的先见先出原则,再把Dequeue出来的元素添加到末尾,就很类似于ScrollView的无限滚动的原理了。在鼠标上滑的过程中,content的PosY值是一直增加的,所以触发滚动的条件就可以设定为位移之差大于Cell的高度值即可。

       数据的刷新,数据到头之后,不能再次进行滚动轮换了,这里用一组值来记录初始化的一组Cell显示的是数据的哪一段。例如HeadNum和TaiNum。比如用20个Cell显示100条数据。初始化后,HeadNum就是0,TailNum就是19。上滑一行数据后,HeadNum=4,TailNum=23(这里假设是20个Cell排成4列)。

下面是完整代码:

public class UIScrollViewTest : MonoBehaviour {

    public  RectTransform content;
    public GameObject cell;
    // cell的初始化个数
    public int cellAmount = 0;
    // 鼠标上滑时,存储Cell的Queue。正序存储
    public Queue F_cellQuee = new Queue();
    // 鼠标下滑时,存储Cell的Queue。到序存储
    public Queue B_cellQuee = new Queue();
    // cell的Size
    public Vector2 cellSize = new Vector2(100,100);
    // cell的间隔
    public Vector2 cellOffset = new Vector2(0,0);
    // 列数
    public int columnCount = 0;
    private int rowCount;
    // 上一次content的位置
    public float lastPos;
    // 滚动的次数
    public int loopCount = 0;
    //  cell显示的数据段的开头和结尾序号
    public int HeadNum = 0;
    public int TailNum;

    public Sprite[] sp;
    public List<Sprite> data;


    void Start()
    {
        for (int i = 0; i < sp.Length; i++)
        {
       
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值