当前位置:   article > 正文

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

unity轮播图场景

效果:

场景结构:

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

主要思路:

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

代码:

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using DG.Tweening;
  6. using UnityEngine;
  7. using UnityEngine.UI;
  8. public class RollControlPanel : MonoBehaviour
  9. {
  10. private RectTransform rollPanel;
  11. private Vector2 startPos;
  12. private ToggleGroup toggleGroup;
  13. private Toggle[] toggles;
  14. private int preToggleIndex = 0;
  15. private int curToggleIndex = 0;
  16. private int toggleCount;
  17. public float moveValue = 756;
  18. private Tween slideTween;
  19. private List<Vector2> panelPos = new List<Vector2>();
  20. // Start is called before the first frame update
  21. void Start()
  22. {
  23. rollPanel = transform.Find("Mask/RollPanel").GetComponent<RectTransform>();
  24. toggleGroup = transform.Find("TogglePanel/ToggleGroup").GetComponent<ToggleGroup>();
  25. toggles = transform.GetComponentsInChildren<Toggle>();
  26. startPos = rollPanel.anchoredPosition;
  27. panelPos.Add(startPos);
  28. int panelCount = rollPanel.childCount;
  29. for (int i = 1; i < panelCount; i++)
  30. {
  31. Vector2 tmp = new Vector2(startPos.x - i * moveValue, startPos.y);
  32. panelPos.Add(tmp);
  33. }
  34. toggleCount = toggles.Length;
  35. for (int i = 0; i < toggleCount; i++)
  36. {
  37. Toggle toggle = toggles[i];
  38. toggles[i].onValueChanged.AddListener((arg0 =>
  39. {
  40. OnToggleOpen(toggle);
  41. }));
  42. }
  43. IEnumerator enumerator = MovePanel();
  44. Coroutine setTogglesetToggle= StartCoroutine(enumerator);
  45. }
  46. /// <summary>
  47. /// 只关注循环播放
  48. /// </summary>
  49. /// <returns></returns>
  50. IEnumerator MovePanel()
  51. {
  52. while (true)
  53. {
  54. yield return new WaitForSeconds(2f);
  55. if (curToggleIndex==toggleCount-1)
  56. {
  57. //挪到最后一个(也就是第一个的副本),偷偷重置位置
  58. slideTween = rollPanel.DOAnchorPosX(panelPos[panelPos.Count - 1].x, 0.5f).OnComplete((() =>
  59. {
  60. rollPanel.anchoredPosition = startPos;
  61. }));
  62. for (int i = 0; i < toggleCount; i++)
  63. {
  64. toggles[i].onValueChanged.RemoveAllListeners();
  65. }
  66. toggles[0].isOn = true;
  67. for (int i = 0; i < toggleCount; i++)
  68. {
  69. Toggle toggle = toggles[i];
  70. toggles[i].onValueChanged.AddListener((arg0 =>
  71. {
  72. OnToggleOpen(toggle);
  73. }));
  74. }
  75. preToggleIndex = curToggleIndex;
  76. curToggleIndex = 0;
  77. }
  78. else
  79. {
  80. //正常相对于当前位置移动
  81. curToggleIndex++;
  82. slideTween = rollPanel.DOAnchorPosX(panelPos[curToggleIndex].x, 0.5f);
  83. for (int i = 0; i < toggleCount; i++)
  84. {
  85. toggles[i].onValueChanged.RemoveAllListeners();
  86. }
  87. toggles[curToggleIndex].isOn = true;
  88. for (int i = 0; i < toggleCount; i++)
  89. {
  90. Toggle toggle = toggles[i];
  91. toggles[i].onValueChanged.AddListener((arg0 =>
  92. {
  93. OnToggleOpen(toggle);
  94. }));
  95. }
  96. preToggleIndex = curToggleIndex;
  97. }
  98. }
  99. }
  100. // private void Update()
  101. // {
  102. // if (Input.GetKeyDown(KeyCode.K))
  103. // {
  104. // StopAllCoroutines();
  105. // slideTween.Kill();
  106. // rollPanel.anchoredPosition = startPos;
  107. // }
  108. // }
  109. void OnToggleOpen(Toggle toggle)
  110. {
  111. StopAllCoroutines();
  112. slideTween.Kill();
  113. if (toggle.isOn)
  114. {
  115. for (int i = 0; i < toggleCount; i++)
  116. {
  117. if (toggle == toggles[i])
  118. {
  119. curToggleIndex = i;
  120. break;
  121. }
  122. }
  123. //直接切换rect位置
  124. rollPanel.anchoredPosition = panelPos[curToggleIndex];
  125. IEnumerator enumerator = MovePanel();
  126. Coroutine setTogglesetToggle= StartCoroutine(enumerator);
  127. }
  128. }
  129. }

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

闽ICP备14008679号