当前位置: 首页 > news >正文

Unity实现广告滚动播放、循环播放、鼠标切换的效果

 效果:

 场景结构:

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

 

using System.Collections;
using System.Collections.Generic;
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 curToggleIndex = 0;private int toggleCount;public float moveValue = 756;// 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;toggleCount = toggles.Length;for (int i = 0; i < toggleCount; i++){Toggle toggle = toggles[i];toggles[i].onValueChanged.AddListener((arg0 =>{OnToggleOpen(toggle);}));}IEnumerator enumerator = SetToggle();Coroutine setTogglesetToggle= StartCoroutine(enumerator);}//定时设置哪个toggle打开IEnumerator SetToggle(){while (true){yield return new WaitForSeconds(1f);Debug.Log("切换toggle");if (curToggleIndex < toggleCount-1){curToggleIndex++;toggles[curToggleIndex].isOn = true;}else{curToggleIndex = 0;toggles[curToggleIndex].isOn = true;}}}//只需要关注移动到toggleIndex对应的本地绝对位置void OnToggleOpen(Toggle toggle){if (toggle.isOn){//获取属于第几个toggle,指定panel移动到某个位置,停止协程重置时间for (int i = 0; i < toggleCount; i++){if (toggle==toggles[i]){curToggleIndex = i;break;}}float curPosX = startPos.x - curToggleIndex * moveValue;StopAllCoroutines();rollPanel.DOAnchorPosX(curPosX, 0.5f).OnComplete((() =>{//每次动结束,重新开一次协程IEnumerator enumerator = SetToggle();Coroutine setTogglesetToggle= StartCoroutine(enumerator);}));}}
}

http://www.lryc.cn/news/137096.html

相关文章:

  • LangChain + Streamlit + Llama:将对话式AI引入本地机器
  • Python 读写 Excel 文件库推荐和使用教程
  • “深入解析JVM:理解Java虚拟机的工作原理和优化技巧“
  • 解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题
  • Oracle-day1:scott用户、查询、取整、截取、模糊查询、别名——23/8/23
  • stm32之3.key开关
  • GPT带我学-设计模式-代理模式
  • VMware Workstation Pro 无法使用开机状态下拍的快照来克隆虚拟机,怎么解决?
  • 【JAVA】XML及其解析技术、XML检索技术、设计模式
  • Ansible 自动化安装软件
  • 简单介绍 React Native 整合 Formik 实现表单校验
  • 蓝帽杯半决赛2022
  • 电路学习+硬件每日学习十个知识点(40)23.8.20 (希腊字母读音,阶跃信号和冲激信号的关系式,信号的波形变换,信号的基本运算,卷积积分,卷积和)
  • Python——列表(list)推导式
  • 代码随想录算法训练营day43 | LeetCode 1049. 最后一块石头的重量 II 494. 目标和 474. 一和零
  • Linux安装jdk、mysql、并部署Springboot项目
  • tomcat更改端口号和隐藏端口号
  • 生信分析Python实战练习 2 | 视频19
  • wps设置其中几页为横版
  • 如何在Ubuntu 22.04上安装PHP 8.1并设置本地开发环境
  • wazuh安装与使用
  • Vue 3 常见面试题汇总
  • Docker是什么?详谈它的框架、使用场景、优势
  • neo4j
  • 【项目 计网5】 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端)
  • windows可视化界面管理服务器上的env文件
  • 自然语言处理在智能客服和聊天机器人中的应用
  • 为什么不建议使用@Async注解创建线程
  • 更新Ubuntu18.04上的CUDA和GCC
  • 算法通过村第6关【青铜】| 如何通过中序和后序遍历恢复二叉树