当前位置:   article > 正文

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

unity 轮播图效果

 效果:

 场景结构

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

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using DG.Tweening;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. public class RollControlPanel : MonoBehaviour
  7. {
  8. private RectTransform rollPanel;
  9. private Vector2 startPos;
  10. private ToggleGroup toggleGroup;
  11. private Toggle[] toggles;
  12. private int curToggleIndex = 0;
  13. private int toggleCount;
  14. public float moveValue = 756;
  15. // Start is called before the first frame update
  16. void Start()
  17. {
  18. rollPanel = transform.Find("Mask/RollPanel").GetComponent<RectTransform>();
  19. toggleGroup = transform.Find("TogglePanel/ToggleGroup").GetComponent<ToggleGroup>();
  20. toggles = transform.GetComponentsInChildren<Toggle>();
  21. startPos = rollPanel.anchoredPosition;
  22. toggleCount = toggles.Length;
  23. for (int i = 0; i < toggleCount; i++)
  24. {
  25. Toggle toggle = toggles[i];
  26. toggles[i].onValueChanged.AddListener((arg0 =>
  27. {
  28. OnToggleOpen(toggle);
  29. }));
  30. }
  31. IEnumerator enumerator = SetToggle();
  32. Coroutine setTogglesetToggle= StartCoroutine(enumerator);
  33. }
  34. //定时设置哪个toggle打开
  35. IEnumerator SetToggle()
  36. {
  37. while (true)
  38. {
  39. yield return new WaitForSeconds(1f);
  40. Debug.Log("切换toggle");
  41. if (curToggleIndex < toggleCount-1)
  42. {
  43. curToggleIndex++;
  44. toggles[curToggleIndex].isOn = true;
  45. }
  46. else
  47. {
  48. curToggleIndex = 0;
  49. toggles[curToggleIndex].isOn = true;
  50. }
  51. }
  52. }
  53. //只需要关注移动到toggleIndex对应的本地绝对位置
  54. void OnToggleOpen(Toggle toggle)
  55. {
  56. if (toggle.isOn)
  57. {
  58. //获取属于第几个toggle,指定panel移动到某个位置,停止协程重置时间
  59. for (int i = 0; i < toggleCount; i++)
  60. {
  61. if (toggle==toggles[i])
  62. {
  63. curToggleIndex = i;
  64. break;
  65. }
  66. }
  67. float curPosX = startPos.x - curToggleIndex * moveValue;
  68. StopAllCoroutines();
  69. rollPanel.DOAnchorPosX(curPosX, 0.5f).OnComplete((() =>
  70. {
  71. //每次动结束,重新开一次协程
  72. IEnumerator enumerator = SetToggle();
  73. Coroutine setTogglesetToggle= StartCoroutine(enumerator);
  74. }));
  75. }
  76. }
  77. }

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

闽ICP备14008679号