赞
踩
废话不多说,上代码
- using UnityEngine;
- using UnityEngine.UI;
-
- public class ImageCarousel : MonoBehaviour
- {
- [SerializeField] private Image[] images; // 将需要轮播的所有图片拖拽到这个数组中
- [SerializeField] private float transitionDuration = 1f; // 图片切换过渡时间
- [SerializeField] private bool loop = true; // 是否循环播放
-
- private int currentImageIndex = 0;
- private bool isTransitioning = false;
-
- void Start()
- {
- if (images.Length > 0)
- {
- ShowCurrentImage();
- StartCoroutine(StartTransition());
- InvokeRepeating("NextImage", transitionDuration, transitionDuration);
- }
- }
-
- IEnumerator StartTransition()
- {
- while (true)
- {
- if (!isTransitioning && images.Length > 1)
- {
- isTransitioning = true;
- LeanTween.alpha(images[currentImageIndex].rectTransform, 0f, transitionDuration).setEaseInOutSine().setOnComplete(() =>
- {
- currentImageIndex = (currentImageIndex + 1) % images.Length; // 循环索引
- images[currentImageIndex].gameObject.SetActive(true); // 显示下一张图片
- LeanTween.alpha(images[currentImageIndex].rectTransform, 1f, transitionDuration).setEaseInOutSine().setOnComplete(() => isTransitioning = false);
- });
- }
- yield return null;
- }
- }
-
- void NextImage()
- {
- if (!loop && currentImageIndex == images.Length - 1) return; // 如果不循环且已经是最后一张图片,则停止
-
- StopAllCoroutines(); // 停止当前所有的协程以防止叠加
- StartCoroutine(StartTransition()); // 开始新的过渡动画
- }
-
- void ShowCurrentImage()
- {
- foreach (var image in images)
- {
- image.gameObject.SetActive(false);
- }
- images[currentImageIndex].gameObject.SetActive(true);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。