Unity使用ScrollRect制作翻页

本文实例为大家分享了使用ScrollRect制作翻页的具体代码,供大家参考,具体内容如下

1.标准的层级结构 ScrollRect->ViewPort->Content,Viewport负责显示区域的大小一般和Mask一起配合使用,Content使用Layout来布局,如果想使用代码来自动定位显示位置需要在Content加上Content size filter.

2.ScrollRectHelper

using UnityEngine;

using UnityEngine.UI;

using UnityEngine.EventSystems;

using System.Collections.Generic;

using System;

public class ScrollRectHelper : MonoBehaviour, IBeginDragHandler, IEndDragHandler

{

// 滑动速度

public float smooting = 5;

// 每页显示的项目

[SerializeField]

private int countPerPage = 10;

ScrollRect srect;

// 总页数

float totalPages;

// 是否拖拽结束

bool isDrag = false;

// 总页数索引比列 0-1

List<float> listPageValue = new List<float> { 0 };

// 滑动的目标位置

public float targetPos = 0;

// 当前位置索引

float nowindex = 0;

void Awake()

{

srect = GetComponent<ScrollRect>();

}

public string PageText()

{

return (nowindex + 1) + "/" + (totalPages + 1);

}

// 计算每页比例

public void CalcListPageValue<T>() where T : MonoBehaviour

{

T[] items = srect.content.GetComponentsInChildren<T>();

srect.content.rect.Set(srect.content.rect.width / 2, srect.content.rect.y, srect.content.rect.width, srect.content.rect.height);

totalPages = (int)(Math.Ceiling((float)items.Length / countPerPage) - 1);

if (items.Length != 0)

{

for (float i = 1; i <= totalPages; i++)

{

//Debug.Log(i / totalPages);

listPageValue.Add((i / totalPages));

}

}

}

void Update()

{

if (!isDrag)

{

srect.horizontalNormalizedPosition = Mathf.Lerp(srect.horizontalNormalizedPosition, targetPos,

Time.deltaTime * smooting);

}

// Debug

if (Input.GetKeyDown(KeyCode.LeftArrow)) PressLeft();

if (Input.GetKeyDown(KeyCode.RightArrow)) PressRight();

}

/// <summary>

/// 拖动开始

/// </summary>

/// <param name="eventData"></param>

public void OnBeginDrag(PointerEventData eventData)

{

isDrag = true;

}

/// <summary>

/// 拖拽结束

/// </summary>

/// <param name="eventData"></param>

public void OnEndDrag(PointerEventData eventData)

{

isDrag = false;

var tempPos = srect.horizontalNormalizedPosition; //获取拖动的值

var index = 0;

float offset = Mathf.Abs(listPageValue[index] - tempPos); //拖动的绝对值

for (int i = 1; i < listPageValue.Count; i++)

{

float temp = Mathf.Abs(tempPos - listPageValue[i]);

if (temp < offset)

{

index = i;

offset = temp;

}

}

targetPos = listPageValue[index];

nowindex = index;

}

public void PressLeft()

{

nowindex = Mathf.Clamp(nowindex - 1, 0, totalPages);

targetPos = listPageValue[Convert.ToInt32(nowindex)];

}

public void PressRight()

{

nowindex = Mathf.Clamp(nowindex + 1, 0, totalPages);

targetPos = listPageValue[Convert.ToInt32(nowindex)];

}

}

以上是 Unity使用ScrollRect制作翻页 的全部内容, 来源链接: utcz.com/z/335989.html

回到顶部