当前位置:   article > 正文

Unity 实现Image轮播图效果_untity 轮播图

untity 轮播图

废话不多说,上代码

  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. public class ImageCarousel : MonoBehaviour
  4. {
  5. [SerializeField] private Image[] images; // 将需要轮播的所有图片拖拽到这个数组中
  6. [SerializeField] private float transitionDuration = 1f; // 图片切换过渡时间
  7. [SerializeField] private bool loop = true; // 是否循环播放
  8. private int currentImageIndex = 0;
  9. private bool isTransitioning = false;
  10. void Start()
  11. {
  12. if (images.Length > 0)
  13. {
  14. ShowCurrentImage();
  15. StartCoroutine(StartTransition());
  16. InvokeRepeating("NextImage", transitionDuration, transitionDuration);
  17. }
  18. }
  19. IEnumerator StartTransition()
  20. {
  21. while (true)
  22. {
  23. if (!isTransitioning && images.Length > 1)
  24. {
  25. isTransitioning = true;
  26. LeanTween.alpha(images[currentImageIndex].rectTransform, 0f, transitionDuration).setEaseInOutSine().setOnComplete(() =>
  27. {
  28. currentImageIndex = (currentImageIndex + 1) % images.Length; // 循环索引
  29. images[currentImageIndex].gameObject.SetActive(true); // 显示下一张图片
  30. LeanTween.alpha(images[currentImageIndex].rectTransform, 1f, transitionDuration).setEaseInOutSine().setOnComplete(() => isTransitioning = false);
  31. });
  32. }
  33. yield return null;
  34. }
  35. }
  36. void NextImage()
  37. {
  38. if (!loop && currentImageIndex == images.Length - 1) return; // 如果不循环且已经是最后一张图片,则停止
  39. StopAllCoroutines(); // 停止当前所有的协程以防止叠加
  40. StartCoroutine(StartTransition()); // 开始新的过渡动画
  41. }
  42. void ShowCurrentImage()
  43. {
  44. foreach (var image in images)
  45. {
  46. image.gameObject.SetActive(false);
  47. }
  48. images[currentImageIndex].gameObject.SetActive(true);
  49. }
  50. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/606872
推荐阅读
相关标签
  

闽ICP备14008679号