Unity UGUI 无限循环scrollview 实现

看了ugui的scrollview的scrollview的实现方式,扩展它来实现无限循环模式应该是不现实了。于是就想着能用ngui的方式来改写吧。

原理:通过部分,整体的方式来实现拖拽

实现:整体部分运动

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

/// <summary>
/// 自定义scrollview 目前只支持水平拖拽
/// </summary>
public class CommonScrollView : MonoBehaviour
{
    public enum EMoveDirection
    {
        none,
        left_to_right,
        right_to_left,
    }
    /// <summary>
    /// 列表的父物体
    /// </summary>
    [SerializeField]
    private Transform itemParent;
    /// <summary>
    /// 容器
    /// </summary>
    [SerializeField]
    private RectTransform container;
    /// <summary>
    /// 列表之间的间隔
    /// </summary>
    [SerializeField]
    private int itemGap;
    /// <summary>
    /// 拖拽速度,聚焦速度
    /// </summary>
    [SerializeField]
    private float dragSpeed,centerSpeed;
    /// <summary>
    /// 列表
    /// </summary>
    private List<Transform> childs { get; set; }
    /// <summary>
    /// 目标中心点
    /// </summary>
    private Transform targetCenterTransform=null;
    /// <summary>
    /// 列表的聚焦点 可能为空
    /// </summary>
    public Transform CenterTransform { get { return GetCenterTransform(); } }
    private Transform lastCenterTransform;
    /// <summary>
    /// 上一次聚焦的中心
    /// </summary>
    public Transform LastCenterTransform { get { return lastCenterTransform; } }
    public delegate void CenterOnCalled(GameObject obj);
    private CenterOnCalled OnCenter;
    private EMoveDirection moveDirection { get; set; }

    private void Awake()
    {
        childs = itemParent.Childs();
    }

    // Update is called once per frame
    private void Update()
    {
        if (targetCenterTransform)
        {
            float x = targetCenterTransform.localPosition.x;
            if (x==0)//单击消除回调
            {
                targetCenterTransform = null;
                return;
            }
        
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值