Unity系列——构建pageView翻页容器

本文介绍如何在Unity中自定义一个PageView组件,利用ScrollRect的horizontalNormalizedPosition属性实现平滑翻页效果。该组件支持动态加载页面,并提供页面创建回调和翻页回调功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值