滚动区域,动态设置滑动长度,分页
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class ScrollTest : MonoBehaviour,IBeginDragHandler,IEndDragHandler {

    //滚动内容
    public RectTransform content;
    //填充类容单元
    public GameObject image;
    //滚动脚本
    public ScrollRect rect;
    //总共的单元个数
    public int AllItemNum;
    //一页放多少个单元
    public int PageItemNum;

    //总页数
    private int PageNum;
    //一页的长度
    private float peerPageLength;

    public float targer = 0;
    public bool isDrag = false;

	// Use this for initialization
	void Awake() {

        for (int i = 0; i < AllItemNum; i++)
        {
            GameObject go = Instantiate(image);
            go.transform.parent = content;
        }

        GridLayoutGroup g = content.GetComponent<GridLayoutGroup>();

        //计算滚动内容的总水平长度,然后设置
        float itemLength = g.cellSize.x + g.spacing.x;
        int PageRowNum = PageItemNum / g.constraintCount;
        float pageLength = itemLength * PageRowNum;
        PageNum = Mathf.CeilToInt( AllItemNum / PageItemNum) + 1;
        content.sizeDelta = new Vector2(pageLength * PageNum,content.sizeDelta.y);

        //计算一页的长度,19个,8个每页,共3页,就是0,0.5,13段
        peerPageLength = 1f / (PageNum - 1);
	}
	
	// Update is called once per frame
	void Update () {

        if (isDrag) return;

        rect.horizontalNormalizedPosition = Mathf.Lerp(rect.horizontalNormalizedPosition, targer, Time.deltaTime * 30);

	}

    public void OnBeginDrag(PointerEventData eventData)
    {
        isDrag = true;
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        isDrag = false;
        if (eventData.delta.x > 0f || targer < rect.horizontalNormalizedPosition)
            targer += peerPageLength;
        else {
            targer -= peerPageLength;
        }
            

        targer = Mathf.Clamp01(targer);
    }
}



首页 我的博客
粤ICP备17103704号