在Unity中实现分页数据显示和分页控制

参考:用两种简单的方式实现unity的分页效果

在这里插入图片描述
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Rendering.VirtualTexturing;
using UnityEngine.TerrainUtils;public class PageController : MonoBehaviour
{private List<int> items;/// <summary>/// 总数据数量/// </summary>private int ItemsCount;/// <summary>/// 总页数,没有数据默认为1/// </summary>private int PageCount = 1;/// <summary>/// 当前页数的标签/// </summary>private Text PanelText;/// <summary>/// 当前页面索引/// </summary>private int PageIndex = 1;/// <summary>/// 上一页按钮/// </summary>private Button BtnPrevious;/// <summary>/// 下一页按钮/// </summary>private Button BtnNext;/// <summary>/// 父物体组件,所有的子物体全部挂在这个上/// </summary>public GameObject ParentObj;/// <summary>/// 需要使用的预制件,该游戏物体上会绑定各种事件、资源等,同时也是子物体/// </summary>public GameObject gameObjectPrefab;public bool pressBtnPrevious = false;public bool pressBtnNext = false;// 填充进UpdateUI<T>的数据List<int> dataList = new List<int> { 1, 2, 3, 4, 5 ,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22};List<string> dataList2 = new List<string> { "a", "b", "c", "d", "e", "a2", "b2", "c2", "d2", "e2", "a3", "b3", "c3", "d3", "e3","a4", "b4", "c4", "d4", "e4" };void Start(){InitUGUI();Init(dataList2);}/// <summary>/// 初始化UGUI/// </summary>private void InitUGUI(){BtnNext = GameObject.Find("Canvas/BtnNext").GetComponent<Button>(); // 下一页按钮BtnPrevious = GameObject.Find("Canvas/BtnPrevious").GetComponent<Button>(); // 上一页按钮PanelText = GameObject.Find("Canvas/PanelText").GetComponent<Text>(); // 页码文本gameObjectPrefab = (GameObject)Resources.Load("Test/data"); // 预制体//为上一页按钮与下一页按钮添加事件BtnNext.onClick.AddListener(() => { Next(); });BtnPrevious.onClick.AddListener(() => { Previous(); });}/// <summary>/// 下一页事件/// </summary>private void Next(){pressBtnNext = true;//最后一页禁止翻页if (PageIndex == PageCount)return;if (PageIndex >= PageCount)PageIndex = PageCount;DestroyChildObject(ParentObj);  // 删除所有子对象//DestroyOneChildObj(ParentObj);  // 按BtnNext删除最左边的子对象PageIndex += 1;UpdateUI(PageIndex, dataList2);//更新页面页数PanelText.text = string.Format("{0}/{1}", PageIndex.ToString(), PageCount.ToString());pressBtnNext = false;}private void Previous(){pressBtnPrevious = true;//第一页禁止翻页if (PageIndex == 1)return;DestroyChildObject(ParentObj);  // 删除所有子对象//DestroyOneChildObj(ParentObj);  // 按BtnPrevious删除最右边的子对象PageIndex -= 1;UpdateUI(PageIndex, dataList2);//更新页面页数PanelText.text = string.Format("{0}/{1}", PageIndex.ToString(), PageCount.ToString());pressBtnPrevious = false;}/// <summary>/// 初始化元素/// </summary>private void Init<T>(List<T> datas){//计算元素总个数        items = new List<int>();for (int i = 0; i < 20; i++){var index = Random.Range(1, 4);items.Add(index);}ItemsCount = items.Count;//计算总页数PageCount = items.Count % 4 == 0 ? items.Count / 4 : items.Count / 4 + 1;if (items.Count <= 4)PageCount = 1;PageIndex = 1;//调用绑定页数方法//UpdateUI(PageIndex);//datas - >当前页码的_datasList<T>_datas = new List<T>();//UpdateUI(PageIndex, _datas);UpdateUI(PageIndex, dataList2);//更新界面页数PanelText.text = string.Format("{0}/{1}", PageIndex.ToString(), PageCount.ToString());}/// <summary>/// 绑定页数方法/// </summary>/// <param name="当前页码"></param>private void UpdateUI<T>(int currentIndex,List<T> data){//没有数据则直接returnif (ItemsCount <= 0){return;}for (int i = (PageIndex - 1) * 4; i < ((PageIndex - 1) * 4 + 4 > ItemsCount ? ItemsCount : (PageIndex - 1) * 4 + 4); i++){var needGameObject = Instantiate(gameObjectPrefab) as GameObject;needGameObject.transform.SetParent(ParentObj.transform);Text dataText = needGameObject.transform.Find("DataText").GetComponent<Text>();dataText.text = data[i].ToString();//needGameObject.GetComponent<Image>().sprite = LoadSprite(items[i].ToString());}}/// <summary>/// 删除对象下的子对象/// </summary>/// <param name="父物体"></param>public void DestroyChildObject(GameObject parentObject){if (parentObject == null)return;for (int i = parentObject.transform.childCount - 1; i >= 0; i--){Destroy(parentObject.transform.GetChild(i).gameObject);}Resources.UnloadUnusedAssets(); //释放未使用资源}/// <summary>/// 删除对象下的一个子对象(如果按BtnNext就是删除最左边的子对象,按BtnPrevious就是删除最右边的子对象)/// </summary>/// <param name="parentObject"></param>public void DestroyOneChildObj(GameObject parentObject){if (parentObject == null)return;if(pressBtnNext){Destroy(parentObject.transform.GetChild(0).gameObject);//删除最左边的子对象}else if(pressBtnPrevious){Destroy(parentObject.transform.GetChild(parentObject.transform.childCount - 1).gameObject);//删除最右边的子对象}Resources.UnloadUnusedAssets(); //释放未使用资源}private Sprite LoadSprite(string assetName){Texture texture = (Texture)Resources.Load("Textures/" + assetName);Sprite sprite = Sprite.Create((Texture2D)texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));return sprite;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3017522.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

上网行为审计软件分享|三款热门上网行为监控软件推荐

“小王&#xff0c;去找一款软件给我们公司安上&#xff0c;你去搜上网行为审计软件&#xff0c;看看买哪家合适” 这是某公司老板交给助理的一项工作&#xff0c;原话是这样的。 可见其实这类软件大多是人还是比较陌生的。 上网行为审计软件顾名思义就是对上网行为也就是电…

PTA|小字辈

题目 本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 输入格式&#xff1a; 输入在第一行给出家族人口总数 N&#xff08;不超过 100 000 的正整数&#xff09; —— 简单起见&#xff0c;我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号&#x…

streamlit通过子目录访问

运行命令&#xff1a; streamlit hello 系统默认使用8501端口启动服务&#xff1a; 如果想通过子目录访问服务&#xff0c;可以这么启动服务 streamlit hello --server.baseUrlPath "app" 也可以通过以下命令换端口 streamlit hello --server.port 9999 参考&…

面试题:String类型长度有限制吗?最大多少?

简介 Java中String是有长度限制的。String还有长度限制?是的有,而且在JVM编译中还有规范,String长度限制的场景(将某固定文件转码成Base64的形式用字符串存储,在运行时需要的时候在转回来,当时文件比较大),那这个规范限制到底是怎么样的,我们分析下。 …

Unreal游戏GPU参数详解,游戏性能优化再升级

UWA GOT Online For Unreal GPU模式近期全新发布&#xff0c;方便开发者从渲染和带宽的角度进行GPU分析。同时&#xff0c;此次更新中UWA也增加了丰富的GPU参数&#xff0c;涵盖了GPU SoC和GPU Counter模块。这些新增的参数不仅能够帮助Unreal开发者从宏观层面监控GPU的压力状况…

12V系统车灯电源口浪涌过压防护方案及保护器件选型推荐

12V系统车灯驱动电源口浪涌过压防护方案图 12V系统车灯驱动电源口浪涌过压防护方案详解 从图中可知&#xff0c;方案针对车灯驱动电路电源输入口的浪涌过压保护。在车载12V系统中&#xff0c;电源线上面的瞬态浪涌主要来源于抛负载。在12V系统车灯驱动电源输入端&#xff0c;东…

怎么把图片尺寸在线修改?5种方法调整方式介绍

在日常生活和工作中&#xff0c;我们经常遇到需要调整图片尺寸的情况&#xff0c;无论是为了适应自媒体文章内容中的图片、还是上传社交媒体平台要求&#xff0c;调整图片尺寸是一项非常有用的技能。在本教程中&#xff0c;我们将介绍几个方便快捷的图片处理工具&#xff0c;帮…

MySql数据库(概念篇)

数据库概念 什么是数据库 数据库见名之意&#xff0c;就是用来存储数据的仓库&#xff0c;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 没接触数据库之前&#xff0c;一般都是将数据存储在文件中。比如execl文件&#xff0c;word文件中。但是…

Django之单文件上传(以图片为例)

一&#xff0c;创建项目 初始化&#xff0c;数据迁移&#xff0c;创建superuser&#xff0c;创建app等 二&#xff0c;配置settings.py 1&#xff0c;配置数据库&#xff08;本作者使用的mysql&#xff09;&#xff0c;以前文章有提到 2&#xff0c;配置静态文件存放路径 STAT…

计算机毕业设计 | springboot+vue小米商城 购物网站管理系统(源码+论文+讲解视频)

1&#xff0c;项目背景 国家大力推进信息化建设的大背景下&#xff0c;城市网络基础设施和信息化应用水平得到了极大的提高和提高。特别是在经济发达的沿海地区&#xff0c;商业和服务业也比较发达&#xff0c;公众接受新事物的能力和消费水平也比较高。开展商贸流通产业的信息…

纯血鸿蒙APP实战开发——Canvas实现模拟时钟案例

介绍 本示例介绍利用Canvas 和定时器实现模拟时钟场景&#xff0c;该案例多用于用户需要显示自定义模拟时钟的场景。 效果图预览 使用说明 无需任何操作&#xff0c;进入本案例页面后&#xff0c;所见即模拟时钟的展示。 实现思路 本例的的主要实现思路如下&#xff1a; …

最新版Ceph( Reef版本)块存储简单对接k8s

当前ceph 你的ceph集群上执行 1.创建名为k8s-rbd 的存储池 ceph osd pool create k8s-rbd 64 642.初始化 rbd pool init k8s-rbd3 创建k8s访问块设备的认证用户 ceph auth get-or-create client.kubernetes mon profile rbd osd profile rbd poolk8s-rbd部署 ceph-rbd-csi c…

Origin拟合EIS(电化学阻抗谱),怎么出来圆圈

1.先导入数据&#xff0c;以点图的形式画出来 2.重要的一步Fitting&#xff0c;按照我这个一步一步来就行 3.将其中的Function选择为Elipse&#xff0c;然后点拟合至最佳条件 4.第三步做完就会发现圆圈已经出来了&#xff0c;然后点OK就行 5.搞定

数仓开发中期:理论巩固

一、数仓以及商业智能&#xff08;Data Warehousing and Business Intelligence, DW/BI&#xff09;系统 1.1数据操作和数据获取的区别 对所有组织来说&#xff0c;信息都是其最重要的财富之一。信息几乎总是用作两个目的:操作型记录的保存和分析型决策的制定。简单来说&…

pytest教程-38-钩子函数-pytest_runtest_protocol

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_collection_finish钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_runtest_protocol钩子函数的使用方法。 pytest_runtest_protocol 钩子函数在 pytest 运行单个测试用例之前…

内容安全(IPS入侵检测)

入侵检测系统&#xff08; IDS &#xff09;---- 网络摄像头&#xff0c;侧重于风险管理&#xff0c;存在于滞后性&#xff0c;只能够进行风险发现&#xff0c;不能及时制止。而且早期的IDS误报率较高。优点则是可以多点进行部署&#xff0c;比较灵活&#xff0c;在网络中可以进…

STM32F4xx开发学习_SysTick

SysTick系统定时器 SysTick属于CM4内核外设&#xff0c;有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现&#xff0c;可用于操作系统&#xff0c;提供必要的时钟节拍 SysTick简介 SysTick是一个 24 位向下定时器&#xff0c;属于CM4内核中的一个外设&#xff0c;…

漏洞是如何产生的,该怎么提前预防处理

一、漏洞产生原因 漏洞通常指的是在硬件、软件、协议的具体实现或系统安全策略中隐藏的缺陷&#xff0c;这些缺陷可能被攻击者利用&#xff0c;以未经授权的方式访问或损害系统。它们并非源于安装过程或长期运行后的磨损&#xff0c;而是源于编程过程中的人为因素。 在程序开…

【R语言从0到精通】-4-回归建模

通过之前的文章&#xff0c;我们已经基本掌握了R语言的基本使用方法&#xff0c;那从本次教程开始&#xff0c;我们开始聚焦如何使用R语言进行回归建模。 4.1 回归简介 回归分析是一种统计学方法&#xff0c;用于研究两个或多个变量之间的相互关系和依赖程度。它可以帮助我们了…

QT7_视频知识点笔记_2_对话框,布局,按钮,控件(查看帮助文档找功能函数)

第二天&#xff1a; 对话框&#xff0c;布局&#xff0c;按钮 QMainWindow&#xff1a;菜单下拉框添加之后可通过ui->actionXXX&#xff08;自定义的选项名&#xff09;访问&#xff0c;用信号triggered发出信号&#xff0c;槽函数可以使用lambda表达式进行 //菜单栏&am…