Unity 使用NGUI制作无限滑动列表
原理:
复用几个子物体,通过子物体的循环移动实现,如下图

在第一个子物体滑动到超出一定数值时,使其放到最下方

--------------------------------------------------------------》

然后不停的循环往复,向下滑动也是这样的原理
下边上代码:
首先得到Scorll View的高度,使用UIpanel获取,
UIPanel uiPanel = this.GetComponent<UIPanel>();
计算一个最高点和一个最低点

使用 Scroll View的y轴位置,加减其高度的一半获得
topY = grid.transform.TransformPoint(new Vector3(0, uiPanel.height / 2 + this.transform.position.y, 0));
bottomY = grid.transform.TransformPoint(new Vector3(0, this.transform.position.y - uiPanel.height / 2, 0));
为什么要转换为世界坐标呢?
首先要看一下Grid和Item是如何滑动的,如下:

可以发现滑动的时候,Grid和子物体面板上的坐标压根不变,显示的都是本地坐标,所以要用一个变量来判断,就必须转换到世界空间下的坐标,有了这个就可以进行判断了,代码如下:(目前代码不是最优,中间增加了没有必要的判断,后边会优化掉)。
// 处理向上滚动
for (int i = 0;i < visibleItems.Count; i++)
{if (grid.transform.TransformPoint(visibleItems[i].transform.localPosition).y > topY.y){}} // 处理向下滚动for (int i = 0; i < visibleItems.Count; i++){if (grid.transform.TransformPoint(visibleItems[i].transform.localPosition).y < bottomY.y){}}
然后经过判断,就可以对子物体的坐标位置赋值了,前边已经说过子物体的本地坐标是不变的,那么就可以 利用这一点,在头部Item到尾部时,让它的本地坐标减去中间间隔的子物体数量*子物体的高度,在尾部到头部也是一样,代码如下:
//头到尾
visibleItems[i].transform.localPosition = new Vector3(0, visibleItems[i].transform.localPosition.y - visibleItemCount * 100, 0);//尾到头
visibleItems[i].transform.localPosition = new Vector3(0, visibleItems[i].transform.localPosition.y + visibleItemCount * 100, 0);
如何判断向上还是向下滑动?
记录grid的世界坐标,如果这一帧的值比上一帧的值小,则是向下,否则是向上,并在Update函数下执行,使用一个bool值,使其只在拖动列表的时候执行,代码如下:
private void Update(){if (isDrag){currentPosition = grid.transform.position.y;// 处理向上滚动if (currentPosition > lastPosition){}// 处理向下滚动else if (currentPosition < lastPosition){}lastPosition = currentPosition;} }
这个bool值如何赋值?
使用Scroll View的两个函数.onDragStarted,onDragFinished,在代码中给这两个函数分别绑定改变这个bool的值的函数即可。
最后结果:

相关文章:
Unity 使用NGUI制作无限滑动列表
原理: 复用几个子物体,通过子物体的循环移动实现,如下图 在第一个子物体滑动到超出一定数值时,使其放到最下方 --------------------------------------------------------------》 然后不停的循环往复,向下滑动也是这…...
linux中断调用流程(arm)
文章目录 ARM架构下Linux中断处理全流程解析:从硬件触发到驱动调用 ⚡**一、中断触发与硬件层响应** 🔌**1. 设备触发中断** 📡 **二、CPU阶段:异常入口与上下文处理** 🖥️**1. 异常模式切换** 🔄**2. 跳转…...
基于Matlab的多目标粒子群优化
在复杂系统的设计、决策与优化问题中,常常需要同时兼顾多个相互冲突的目标,多目标粒子群优化(MOPSO)算法应运而生,作为群体智能优化算法家族中的重要成员,它为解决此类棘手难题提供了高效且富有创新性的解决…...
【网络安全】——协议逆向与频繁序列提取:从流量中解码未知协议
目录 引言 一、为什么要结合频繁序列提取? 二、四步融合分析法 步骤1:原始流量采集与预处理 步骤2:多粒度序列模式挖掘 层1:单包内字节级频繁项 层2:跨数据包的行为序列 步骤3:关键字段定位与结构假…...
CSS 中等比例缩放的演变:从传统技巧到 aspect-ratio 属性
CSS 中等比例缩放的演变:从传统技巧到 aspect-ratio 属性 在响应式网页设计和多设备兼容成为主流的今天,如何实现元素的等比例缩放成为前端开发中一个重要的课题。无论是图片、视频还是其他容器,都常常需要保持固定的宽高比,以便…...
系统架构设计师—计算机基础篇—进度管理
文章目录 基本概念进程的特征进程的状态前趋图 进程的通信进程的互斥做题方法 进程的同步PV操作做题方法 基本概念 进程的特征 进程通常由程序、数据集合、进程控制块PCB组成。 PCB是一种数据结构,是进程存在的唯一标识。 组织方式说明线性方式把所有PCB组织在一…...
初始提示词(Prompting)
理解LLM架构 在自然语言处理领域,LLM(Large Memory Language Model,大型记忆语言模型)架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…...
Ollama+AnythingLLM安装
一、文件准备 1. 安装包获取 从联网设备下载: AnythingLLMDesktopInstaller.exe(官网离线安装包) deepseek-r1-1.5b.gguf(1.5B 参数模型文件) 2. 传输介质 使用 U 盘或移动硬盘拷贝以下文件至离线设…...
docker拉取失败
备份原始配置文件 sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 清理或修复 daemon.json 文件 sudo nano /etc/docker/daemon.json 删除 文件中的所有内容,确保文件为空。 cv下面这个文件内容 { "registry-mirrors": [ &…...
PHP之Cookie和Session
在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于cookie和session的信息。 Cookie 参数信息 setcookie(name,value,expire, path, domain); name : Cookie的名称。 value : Cookie的值。 expire : Cookie的过期时间,可以是一…...
【万字长文】基于大模型的数据合成(增强)及标注
写在前面 由于合成数据目前是一个热门的研究方向,越来越多的研究者开始通过大模型合成数据来丰富训练集,为了能够从一个系统的角度去理解这个方向和目前的研究方法便写了这篇播客,希望能对这个领域感兴趣的同学有帮助! 欢迎点赞&…...
CES Asia 2025增设未来办公教育板块,科技变革再掀高潮
作为亚洲消费电子领域一年一度的行业盛会,CES Asia 2025(第七届亚洲消费电子技术贸易展)即将盛大启幕。今年展会规模再度升级,预计将吸引超过500家全球展商参展,专业观众人数有望突破10万。除了聚焦人工智能、物联网、…...
Python详细安装教程——Python及PyCharm超详细安装教程:新手小白也能轻松搞定!(最新版)
Python作为一门简单易学、功能强大的编程语言,近年来在数据分析、人工智能、Web开发等领域广受欢迎。而PyCharm作为一款专业的Python集成开发环境(IDE),提供了强大的代码编辑、调试和项目管理功能,是Python开发者的得力…...
游戏引擎学习第137天
演示资产系统中的一个 bug 我们留下了个问题,你现在可以看到,移动时它没有选择正确的资产。我们知道问题的原因,就在之前我就预见到这个问题会出现。问题是我们的标签系统没有处理周期性边界的匹配问题。当处理像角度这种周期性的标签时&…...
RAGflow升级出错,把服务器灌满了
使用自动化更新命令,从16升级到17,结果发现出现了大问题,不断下载,一直无法下载完毕。 df -h 直接把服务器搞满了。哈哈哈哈~。查看一下: sudo du -sh /var/lib/docker确认是docker里面安装的ragflow有问题。所以&am…...
[数字图像处理]直方图规定化
这里分别使用基于像素手动计算、调用工具箱函数两种方法实现直方图规定化 1.基于像素进行直方图规定化 (1)读取了原始图像和期望图像,并将它们转换为灰度图像 (2)计算原始图像和期望图像的像素概率分布直方图P(i)和…...
OpenMCU(一):STM32F407 FreeRTOS移植
概述 本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程,该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…...
Redis - 高可用实现方案解析:主从复制与哨兵监控
文章目录 Pre概述Redis 高可用实现方案一、主从复制机制1.1 全量同步流程1.2 增量同步(PSYNC)流程 二、哨兵监控机制2.1 故障转移时序流程 三、方案对比与选型建议四、生产环境实践建议 Pre Redis-入门到精通 Redis进阶系列 Redis进阶 - Redis主从工作…...
SPI硬件设计及通信原理解析
SPI(Serial Peripheral interface,串行外围设备接口),是一种高速的,全双工,同步通信总线。 SPI采用主从控制模式(Master--Slave)架构,一般有1个主设备、一个或多个从设备,使得主设备可以与多个从设备之间实现片间通信。 SPI在芯片管脚中只占用四根线节约了芯片的管脚…...
腾讯云物联网平台(IoT Explorer)设备端使用
1、直接看图流程 2、跑起来demo,修改产品id,设备名称,设备秘钥。 3、连接部分 4、修改默认地址和端口 sdk里面的地址默认是带着产品ID拼接的,咱们现在中铁没有泛域名解析,要改下这里。把+productID都去掉,然后地址里的.也去掉。...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
