Unity 无限循环ScoreView (垂直或者水平2种展示)

记录一个昨天刚做的无限循环ScoreView ,这个比较简单,网上教程很多,我这里就不详细说了,代码都有注释,直接上代码。首先是的scrollView Item类,这个类主要用于检测,某个Conten下的对象,是否需要回收,是否需要调用被回收的对象public class LooPItem : MonoBehaviour{ private RectTransform selfRect; //获取自身的rect private RectTransform scrollViewRe
摘要由CSDN通过智能技术生成

记录一个昨天刚做的无限循环ScoreView ,这个比较简单,网上教程很多,我这里就不详细说了,代码都有注释,直接上代码。

如果有哪些地方不够好或者不够完善,欢迎指出,一起进步~

首先是的scrollView Item类,这个类主要用于检测,某个Conten下的对象,是否需要回收,是否需要调用被回收的对象

public class LooPItem : MonoBehaviour
{
   

    private RectTransform selfRect;  //获取自身的rect
    private RectTransform scrollViewRect;//获取scrollView的rect

    private Vector3[] selfRectCorners;//获取自身的4个角的位置
    private Vector3[] scrollViewRectCorners;//获取scrollView的4个角的位置

    public UnityAction AddHeadItem, RemoveHeadItem, AddLastItem, RemoveLastItem;//需要执行的事件:添加头部Item,回收头部Item,添加尾部Item,回收尾部Item,
    public ScrollViewType scrollViewType;

    private void Awake()
    {
   
        selfRect = this.transform.GetComponent<RectTransform>();
        scrollViewRect = this.transform.GetComponentInParent<ScrollRect>().GetComponent<RectTransform>();

        selfRectCorners = new Vector3[4];
        scrollViewRectCorners = new Vector3[4];

    }

    void Update()
    {
   
        Debug.Log(scrollViewType);

        switch (scrollViewType)
        {
   
            case ScrollViewType.Horizontal:
                HorizontalListener();
                break;
            case ScrollViewType.Vertical:
                VerticalListener();
                break;

        }
    
    }

    /// <summary>
    /// 垂直循环监听事件
    /// </summary>
    public void VerticalListener()
    {
   
        selfRect.GetWorldCorners(selfRectCorners);
        scrollViewRect.GetWorldCorners(scrollViewRectCorners);

        if (IsFirst())
        {
   
            if (selfRectCorners[0].y > scrollViewRectCorners[1].y)
            {
   
                //回收Item
               RemoveHeadItem();
            }

            if (selfRectCorners[1].y < scrollViewRectCorners[1].y)
            {
   
                //添加Item
                AddHeadItem();
            }
        }

        if (IsLast())
        {
   
            if (selfRectCorners[0].y > scrollViewRectCorners[0].y)
            {
         
                //添加Item
                AddLastItem();
            }

            if (selfRectCorners[1].y < scrollViewRectCorners[0].y)
            {
   
                //回收Item
                RemoveLastItem();
            }
        }
    }

    /// <summary>
    /// 水平循环监听事件
    /// </summary>
    public void HorizontalListener()
    {
   
        selfRect.GetWorldCorners(selfRectCorners);
        scrollViewRect.GetWorldCorners(scrollViewRectCorners);

        if (IsFirst())
        {
   
            if (selfRectCorners[3].x < scrollViewRectCorners[0].x)
            {
   
                //回收Item
                RemoveHeadItem();
            }

            if (selfRectCorners[0].x > scrollViewRectCorners[0].x)
            {
   
                //添加Item
                AddHeadItem();
            }
        }

        if (IsLast())
        {
   
            if (selfRectCorners[3].x < scrollViewRectCorners[3].x)
            {
   
                //添加Item
                AddLastItem();
            }

            if (selfRectCorners[0].x > scrollViewRectCorners[3].x)
            {
   
                //回收Item
                RemoveLastItem();
            }
        }
    }

    /// <summary>
    /// 判断是否是头部
    /// </summary>
    /// <returns></returns>
    public bool IsFirst()
    {
   
        for (int i = 0; i < this.transform.parent.childCount; i++
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值