Unity UGUI 效果 之 多页翻页,多页任意翻页的简单效果实现
时间: 2024-02-01 16:16:58 浏览: 157
Unity UGUI 效果 之 多页翻页,多页任意翻页的简单效果实现(示例演示为动态加载多图片实现翻页预览效果)
3星 · 编辑精心推荐
实现多页翻页和多页任意翻页的方式有很多种,下面介绍一种较为简单的实现方式。
1. 创建一个 ScrollRect 对象,并将 Content 对象的 Rect Transform 的 Anchor Presets 设置为 Stretch。
2. 在 Content 下创建多个 Page 对象,并将它们的 Rect Transform 的 Anchor Presets 设置为 Stretch。每个 Page 对象都应该放置一个要显示的 UI 元素。
3. 为 ScrollRect 添加一个 Horizontal Layout Group 组件,并将 Child Force Expand 和 Child Control Height 设置为 true。
4. 在代码中添加以下代码,实现多页翻页和多页任意翻页的效果:
```csharp
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections.Generic;
public class ScrollRectPage : MonoBehaviour, IBeginDragHandler, IEndDragHandler
{
public ScrollRect scrollRect;
public float smoothTime = 0.5f;
public float sensitivity = 0.2f;
private List<float> pages = new List<float>();
private int currentPage = 0;
private float targetPage = 0;
private bool isDragging = false;
void Start()
{
int pageCount = scrollRect.content.childCount;
for (int i = 0; i < pageCount; i++)
{
float page = i * scrollRect.viewport.rect.width / (pageCount - 1);
pages.Add(-page);
}
}
void Update()
{
if (!isDragging)
{
float nearestPage = pages[currentPage];
for (int i = 0; i < pages.Count; i++)
{
if (Mathf.Abs(pages[i] - scrollRect.horizontalNormalizedPosition) < Mathf.Abs(nearestPage - scrollRect.horizontalNormalizedPosition))
{
nearestPage = pages[i];
targetPage = i;
}
}
if (currentPage != targetPage)
{
currentPage = (int)targetPage;
}
scrollRect.horizontalNormalizedPosition = Mathf.Lerp(scrollRect.horizontalNormalizedPosition, nearestPage, smoothTime * Time.deltaTime);
}
}
public void OnBeginDrag(PointerEventData eventData)
{
isDragging = true;
}
public void OnEndDrag(PointerEventData eventData)
{
isDragging = false;
float delta = eventData.delta.x / scrollRect.viewport.rect.width;
if (Mathf.Abs(delta) > sensitivity)
{
if (delta > 0)
{
currentPage--;
}
else
{
currentPage++;
}
}
currentPage = Mathf.Clamp(currentPage, 0, pages.Count - 1);
targetPage = currentPage;
}
}
```
5. 将 ScrollRectPage 脚本挂载到 ScrollRect 对象上,并将 scrollRect 属性设置为 ScrollRect 对象。
6. 运行程序,就可以实现多页翻页和多页任意翻页的效果了。
阅读全文