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

Unity 自动轮播、滑动轮播

如图所示,可设置轮播间隔,可左右滑动进行轮播

1.在UGUI创建个Image,添加自动水平组件

 2.添加并配置脚本

3.代码如下,都有注释

using UnityEngine;
using UnityEngine.UI;public class IndicatorManager : MonoBehaviour
{public GameObject indicatorPrefab; // 轮播物体的预制体public Transform indicatorParent; // 轮播物体的父级对象private int pageCount = 5; // 页面数量private GameObject[] indicatorsArray; // 存储所有轮播物体的数组private int currentPage = 0; // 当前页面索引private Vector2 slideStartPosition; // 记录滑动的起始点private bool isSliding = false; // 标志是否正在执行滑动操作private bool isAutoSlidingPaused = false; // 标志是否暂停自动轮播private float autoSlideInterval = 3f; // 自动轮播间隔时间private float autoSlideTimer = 0f; // 计时器,用于自动轮播private void Start(){CreateIndicators();UpdateIndicators();}private void Update(){// 更新计时器UpdateTimer();// 检测左右滑动手势DetectSwipe();}// 创建页面指示器private void CreateIndicators(){indicatorsArray = new GameObject[pageCount];for (int i = 0; i < pageCount; i++){GameObject indicator = Instantiate(indicatorPrefab, indicatorParent);indicatorsArray[i] = indicator;}}// 设置当前页面,并更新页面指示器private void SetCurrentPage(int pageIndex){currentPage = Mathf.Clamp(pageIndex, 0, pageCount - 1);UpdateIndicators();}// 更新页面指示器的显示状态private void UpdateIndicators(){for (int i = 0; i < pageCount; i++){// 将当前页面的轮播物体颜色设置为白色,其他页面的轮播物体颜色设置为灰色indicatorsArray[i].GetComponent<Image>().color = (i == currentPage) ? Color.white : new Color(0.5f, 0.5f, 0.5f, 0.5f);}}// 自动轮播方法private void AutoSlide(){// 如果没有正在执行滑动操作且未暂停自动轮播,则切换到下一个页面if (!isSliding && !isAutoSlidingPaused){SetCurrentPage((currentPage + 1) % pageCount);}}// 检测左右滑动手势private void DetectSwipe(){if (Input.GetMouseButtonDown(0)){// 记录滑动的起始点if (IsInsideParent(Input.mousePosition)){slideStartPosition = Input.mousePosition;}}else if (Input.GetMouseButton(0)){float deltaX = Input.mousePosition.x - slideStartPosition.x;// 如果没有正在执行滑动操作且滑动距离足够大,则切换页面if (!isSliding && !isAutoSlidingPaused && Mathf.Abs(deltaX) > 50f && IsInsideParent(Input.mousePosition)){int direction = (deltaX > 0) ? -1 : 1;SetCurrentPage((currentPage + direction + pageCount) % pageCount);// 标志为正在执行滑动操作isSliding = true;// 暂停自动轮播PauseAutoSlide();}}else if (Input.GetMouseButtonUp(0)){// 重置滑动标志isSliding = false;// 恢复自动轮播ResumeAutoSlide();}}// 判断坐标是否在父物体内private bool IsInsideParent(Vector2 position){RectTransform parentRect = indicatorParent.GetComponent<RectTransform>();return RectTransformUtility.RectangleContainsScreenPoint(parentRect, position);}// 更新计时器private void UpdateTimer(){// 如果没有正在执行滑动操作且未暂停自动轮播,则更新计时器if (!isSliding && !isAutoSlidingPaused){autoSlideTimer += Time.deltaTime;// 如果计时器超过轮播间隔时间,则执行自动轮播if (autoSlideTimer >= autoSlideInterval){AutoSlide();// 重置计时器autoSlideTimer = 0f;}}}// 暂停自动轮播private void PauseAutoSlide(){isAutoSlidingPaused = true;}// 恢复自动轮播,并重置计时器private void ResumeAutoSlide(){isAutoSlidingPaused = false;autoSlideTimer = 0f;}
}

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

相关文章:

  • 纯html+js+css个人博客
  • 二百二十一、HiveSQL报错:return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  • JavaEE学习笔记 2024-1-25 --VUE的入门使用
  • php-fpm详细讲解
  • 小白水平理解面试经典题目LeetCode 455 Assign Cookies【Java实现】
  • uniapp 问题汇总-问题数(2)
  • [AG32VF407]国产MCU+FPGA Verilog编写控制2路gpio输出不同频率方波实验
  • python coding with ChatGPT 打卡第15天| 二叉树:翻转二叉树、对称二叉树
  • Python(19)Excel表格操作Ⅰ
  • HiveSQL题——聚合函数(sum/count/max/min/avg)
  • 计算机是什么做的
  • C++多线程1(复习向笔记)
  • 代理IP在游戏中的作用有哪些?
  • SVN Previous operation has not finished; run ‘cleanup‘ if it was interrupted
  • MATLAB知识点:MATLAB的文件管理
  • 【深度学习】MNN ImageProcess处理图像顺序,逻辑,均值,方差
  • 代码随想录算法训练营29期Day35|LeetCode 860,406,452
  • 20240130金融读报1分钟小得01
  • 刷力扣题过程中发现的不熟的函数
  • native2ascii命令详解
  • 什么是Vue Vue入门案例
  • 【C/Python】GtkApplicationWindow
  • SpringBoot自定义全局事务
  • 【FINEBI】finebi中常用图表类型及其适用场景
  • Kaggle竞赛系列_SpaceshipTitanic金牌方案分析_数据分析
  • Tortoise-tts Better speech synthesis through scaling——TTS论文阅读
  • 单元测试工具JEST入门——纯函数的测试
  • Elasticsearch Windows版安装配置
  • 安装 vant-ui 实现底部导航栏 Tabbar
  • GitHub国内打不开(解决办法有效)