做ui系统的时候,经常会使用到翻页容器。这边自己封装了一个,主要是根据监听滑动,ScrollRect的horizontalNormalizedPosition属性来实现插值。
实现了动态加载page,可以动态创建格子,每个创建有相应的回调,也有翻页的回调。代码:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// @desc: 翻页容器,继承接口:IBeginDragHandler(开始拖拽),IEndDragHanler(结束拖拽),IDragHandler(拖拽中)
/// @author: Rambo
/// @use 基于ugui5.3.6 通过创建Scroll View,并在Content添加组件content size fitter设置Hori fit为preferred size,
/// 添加组件horizontal layout group,并在Content下添加翻页模板defPage,为defPage添加layout element,设置属性
/// preferred width和preferred height。格子翻页就为defPage添加layout group。
/// @use 代码初始化InitPage,根据需求选择 格子LayoutGrid或者普通LayoutNorPage
/// </summary>
public class PageView : MonoBehaviour, IBeginDragHandler, IEndDragHandler
{
private ScrollRect rect; //滑动组件
private int currentPageIndex = -1; //当前页下标
private float targethorizontal = 0; //滑动的起始坐标
private bool isDrag = false; //是否拖拽结束
private float startime = 0f; //开始时间
private float delay = 0.1f; //延时时间
private int maxPageNum = 0; //最大页数
private GameObject defPage; //默认翻页模板
private int createPage = 0; //已创建页数
private GameObject defGrid; //格子模板
private int row; //行
private int column; //列
private bool layoutGridItem = false; //是否为格子容器
private List<GameObject> gridList = new List<GameObject>(); //格子翻页的每个格子存储
private List<GameObject> p