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); } }