Unity实现UI图片面板滚动播放效果第二弹

效果:

场景结构:

 特殊物体:panel下面用排列组件horizent layout group放置多个需要显示的面板,用mask遮罩好。

 

主要思路:

这次是要在最后一个toggle的地方,依然向左滚动回1,这是难点。因此实际上在4后面,还增加了一个1面板的副本,等滑动到4后面的1后,直接重设整个panel的recttransform,狸猫换太子,视觉欺骗。

代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;public class RollControlPanel : MonoBehaviour
{private RectTransform rollPanel;private Vector2 startPos;private ToggleGroup toggleGroup;private Toggle[] toggles;private int preToggleIndex = 0;private int curToggleIndex = 0;private int toggleCount;public float moveValue = 756;private Tween slideTween;private List<Vector2> panelPos = new List<Vector2>();// Start is called before the first frame updatevoid Start(){rollPanel = transform.Find("Mask/RollPanel").GetComponent<RectTransform>();toggleGroup = transform.Find("TogglePanel/ToggleGroup").GetComponent<ToggleGroup>();toggles = transform.GetComponentsInChildren<Toggle>();startPos = rollPanel.anchoredPosition;panelPos.Add(startPos);int panelCount = rollPanel.childCount;for (int i = 1; i < panelCount; i++){Vector2 tmp = new Vector2(startPos.x - i * moveValue, startPos.y);panelPos.Add(tmp);}toggleCount = toggles.Length;for (int i = 0; i < toggleCount; i++){Toggle toggle = toggles[i];toggles[i].onValueChanged.AddListener((arg0 =>{OnToggleOpen(toggle);}));}IEnumerator enumerator = MovePanel();Coroutine setTogglesetToggle= StartCoroutine(enumerator);}/// <summary>/// 只关注循环播放/// </summary>/// <returns></returns>IEnumerator MovePanel(){while (true){yield return new WaitForSeconds(2f);if (curToggleIndex==toggleCount-1){//挪到最后一个(也就是第一个的副本),偷偷重置位置slideTween = rollPanel.DOAnchorPosX(panelPos[panelPos.Count - 1].x, 0.5f).OnComplete((() =>{rollPanel.anchoredPosition = startPos;}));for (int i = 0; i < toggleCount; i++){toggles[i].onValueChanged.RemoveAllListeners();}toggles[0].isOn = true;for (int i = 0; i < toggleCount; i++){Toggle toggle = toggles[i];toggles[i].onValueChanged.AddListener((arg0 =>{OnToggleOpen(toggle);}));}preToggleIndex = curToggleIndex;curToggleIndex = 0;}else{//正常相对于当前位置移动curToggleIndex++;slideTween = rollPanel.DOAnchorPosX(panelPos[curToggleIndex].x, 0.5f);for (int i = 0; i < toggleCount; i++){toggles[i].onValueChanged.RemoveAllListeners();}toggles[curToggleIndex].isOn = true;for (int i = 0; i < toggleCount; i++){Toggle toggle = toggles[i];toggles[i].onValueChanged.AddListener((arg0 =>{OnToggleOpen(toggle);}));}preToggleIndex = curToggleIndex;}}}// private void Update()// {//     if (Input.GetKeyDown(KeyCode.K))//     {//         StopAllCoroutines();//         slideTween.Kill();//         rollPanel.anchoredPosition = startPos;//     }// }void OnToggleOpen(Toggle toggle){StopAllCoroutines();slideTween.Kill();if (toggle.isOn){for (int i = 0; i < toggleCount; i++){if (toggle == toggles[i]){curToggleIndex = i;break;}}//直接切换rect位置rollPanel.anchoredPosition = panelPos[curToggleIndex];IEnumerator enumerator = MovePanel();Coroutine setTogglesetToggle= StartCoroutine(enumerator);}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTFhub-sqli注入-报错注入

用到的函数 updatexml(1&#xff0c; &#xff0c;1) concat(0x7e, ,0x7e) group_concat(目标值) right(&#xff0c;32) 1 1 1 union select updatexml(1,concat(0x7e,database(),0x7e),1) 1 union select updatexml(1,concat(0x7e,(select(group_concat(ta…

ZIP压缩文件如何设置密码保护?

想要保护ZIP压缩文件&#xff0c;我们可以设置打开密码&#xff0c;下面来说说设置ZIP文件密码的两种方法。 方法一&#xff1a;单次设置打开密码 如果只需要对当前的ZIP压缩包进行加密&#xff0c;我们可以单独设置这个压缩包的密码。 使用WinRAR压缩文件的时候可以同时设置…

Redis下载与安装

文章目录 Redis简介下载&#xff0c;安装和配置&#xff08;cmd&#xff09;图形化工具 Redis 简介 下载&#xff0c;安装和配置&#xff08;cmd&#xff09; 开启redis服务 1.在解压出来的文件夹中打开cmd 2.输入 redis-server.exe redis.windows.conf即可开启服务 可以看到…

ElasticSearch总结

ES是什么 ES是一个天生支持分布式的搜索、聚合分析的存储引擎 基于Java开发 基于Lucene的开源分布式搜索引擎 ELK &#xff1a; elasticSearch Logstah Kibana 加入 Beats 后 ELK 改为 &#xff1a;Elastic stack ES解决了什么问题 ES解决的核心问题 &#xff1a; 1.海量数…

Linux Day11---mbash项目(二)

观看本文之前请先阅读Linux Day10的相关内容 1.touch 1.1 open系统调用 int open(const char*path,int oflags,mode_t mode); oflags参数&#xff1a; O_APPEND:把写入数据追加在文件的末尾 O_TRUNC:把文件长度设置为0&#xff0c;丢弃已有的内容 O_CREAT:如果需要&#…

如何自己实现一个丝滑的流程图绘制工具(一)vue如何使用

背景 项目需求突然叫我实现一个类似processOn一样的在线流程图绘制工具。 这可难倒我了&#xff0c;立马去做调研&#xff0c;在github上找了很多个开源的流程图绘制工具&#xff0c; 对比下来我还是选择了 bpmn-js 原因&#xff1a; 1、他的流程图是涉及到业务的&#xff0c…

idea上利用JDBC连接MySQL数据库(8.1.0版)

1.了解jdbc概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API&#xff0c;可以为多种 关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准&#xff0c;据此可以构建 更高级的工具和接口&#…

顺序表链表OJ题(3)——【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a; 今天是链表顺序表OJ练习题最后一次分享&#xff0c;每一次的分享题目的难度也再有所提高&#xff0c;但是我相信大家都是非常机智的&#xff0c;希望看到博主文章能学到东西的可以一键三连关注一下博主…

Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树

Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树 1. 395. 至少有 K 个重复字符的最长子串算法思路参考代码和运行结果 2. 823. 带因子的二叉树算法思路参考代码和运行结果 1. 395. 至少有 K 个重复字符的最长子串 题目难度&#xff1a;中等 标签&#…

ubuntu 22.04 LTS openai triton 安装

第一种方法&#xff1a; pip install triton 第二种方法&#xff0c;安装最新的版本&#xff1a; pip install -U --index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/Triton-Nightly/pypi/simple/ triton-nightly 第三种方法&#xff1a; git c…

大模型+学习机,是概念游戏还是双向奔赴?

众所周知&#xff0c;2023年上半年大模型概念炙手可热。各大科技公司纷纷卷入&#xff0c;或宣称布局相关领域&#xff0c;或率先官宣自研大模型。而随着资本市场对大模型概念的热情有所消退&#xff0c;属于这片战场的新一轮角逐慢慢聚焦在了技术的落地应用上。 8月15日&#…

谈谈光纤通信技术

目录 1.什么是光纤 2.光纤通信的优势 3.光纤通信的应用领域 4.光纤通信带来的技术变革 5.光纤通信未来的发展方向 1.什么是光纤 光纤是一种使用光信号传输数据的通信线路。它由纤维材料制成&#xff0c;通常采用玻璃或塑料。光纤具有非常小的直径&#xff0c;可以将光信号…

基于ADAU1452 DSP语音信号处理算法系统构建

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送音频&#xff0c;DSP音频项目核心开发资料 1 LMS, NLMS 最小均方自适应滤波算法 2 语音活动检测&#xff0c;去混响&#xff0c;波束形成算…

Linux环境离线安装MySQL8.0.33

目录 一、准备 1、检查libaio.so.1 2、卸载删除原有的mariadb 3、删除my.cnf 4、下载mysql安装包 二、安装 1、上传mysql 2、建立mysql所需目录 3、建立配置文件my.cnf 4、创建mysql用户并授权 5、初始化数据库 6、启动MySQL数据库 7、常见启动报错处理 8、配置M…

JavaWeb 速通JSON

目录 一、JSON快速入门 1.基本介绍 : 2.定义格式 : 3.入门案例 : 二、JSON对象和字符串的相互转换 1.常用方法 : 2.应用实例 : 3.使用细节 : 三、JSON在Java中的使用 1.基本说明 : 2.应用场景 : 2.1 JSON <---> JavaBean 2.2 JSON <---> List 2.3 JSON …

JVM 内存大对象监控和优化实践

作者&#xff1a;vivo 互联网服务器团队 - Liu Zhen、Ye Wenhao 服务器内存问题是影响应用程序性能和稳定性的重要因素之一&#xff0c;需要及时排查和优化。本文介绍了某核心服务内存问题排查与解决过程。首先在JVM与大对象优化上进行了有效的实践&#xff0c;其次在故障转移与…

Gorilla LLM:连接海量 API 的大型语言模型

如果你对这篇文章感兴趣&#xff0c;而且你想要了解更多关于AI领域的实战技巧&#xff0c;可以关注「技术狂潮AI」公众号。在这里&#xff0c;你可以看到最新最热的AIGC领域的干货文章和案例实战教程。 一、前言 在当今这个数字化时代&#xff0c;大型语言模型&#xff08;LLM…

【C++】list类的模拟实现

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录 前言一、list类的模拟实现1.1 list的…

2023-08-28 LeetCode每日一题(插入区间)

2023-08-28每日一题 一、题目编号 57. 插入区间二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的…

nacos服务器启动报错集合

报错1 Error creating bean with name ‘user‘: Unsatisfied dependency expressed through field ‘jwtTokenManage 开启鉴权之后&#xff0c;你可以自定义用于生成JWT令牌的密钥&#xff0c;application.properties中的配置信息为&#xff1a; ### Since 1.4.1, worked when…