UI_Star.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class UI_Star : MonoBehaviour
  5. {
  6. private GameObject mPrefab;
  7. /// <summary>
  8. /// 行数
  9. /// </summary>
  10. public int mRow;
  11. /// <summary>
  12. /// 列数
  13. /// </summary>
  14. public int mColum;
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. public int mRowSpace;
  19. /// <summary>
  20. ///
  21. /// </summary>
  22. public int mColumnSpace;
  23. /// <summary>
  24. /// 对其方式
  25. /// </summary>
  26. public StarDirection mDirection = StarDirection.RightAndUp;
  27. /// <summary>
  28. /// 设置好星星的显示规则
  29. /// 几行几列 行间距 对其方式啊什么的
  30. /// </summary>
  31. public void Init(int row, int col, int rspace, int colSpace, StarDirection direction)
  32. {
  33. mRow = row;
  34. mColum = col;
  35. mRowSpace = rspace;
  36. mColumnSpace = colSpace;
  37. mDirection = direction;
  38. mPrefab = this.transform.Find("prefab").gameObject;
  39. mPrefab.SetActive(false);
  40. }
  41. /// <summary>
  42. ///
  43. /// </summary>
  44. private int _curStarNum = 0;
  45. /// <summary>
  46. /// 设置
  47. /// </summary>
  48. public int StarNum
  49. {
  50. get
  51. {
  52. return _curStarNum;
  53. }
  54. set
  55. {
  56. if (_curStarNum != value)
  57. {
  58. _curStarNum = value;
  59. onStarNumChanged();
  60. }
  61. }
  62. }
  63. private List<GameObject> elements = new List<GameObject>();
  64. /// <summary>
  65. /// 显示星星啦啦啦
  66. /// </summary>
  67. private void onStarNumChanged()
  68. {
  69. foreach (GameObject ele in elements)
  70. {
  71. Destroy(ele);
  72. }
  73. elements.Clear();
  74. RectTransform rect = mPrefab.GetComponent<RectTransform>();
  75. float prefabWidth = rect.sizeDelta.x;
  76. float prefabHeight = rect.sizeDelta.y;
  77. for (int i = 0; i < StarNum; i++)
  78. {
  79. GameObject card = (GameObject)Instantiate(mPrefab);
  80. card.name = i.ToString();
  81. card.SetActive(true);
  82. card.transform.SetParent(this.transform);
  83. card.transform.localScale = Vector3.one;
  84. Vector3 destPos = Vector3.zero;
  85. switch (mDirection)
  86. {
  87. case StarDirection.RightAndUp:
  88. destPos.x = (i % mColum) * (prefabWidth + mColumnSpace);
  89. destPos.y = -(i / mColum) * (prefabHeight + mRowSpace);
  90. break;
  91. case StarDirection.RightAndDown:
  92. destPos.x = (i % mColum) * prefabWidth + i * mColumnSpace;
  93. destPos.y = (i / mColum) * (prefabHeight + mRowSpace);
  94. break;
  95. case StarDirection.LeftAndDown:
  96. destPos.x = -(i % mColum) * (prefabWidth + mColumnSpace);
  97. destPos.y = -(i / mColum) * (prefabHeight + mRowSpace);
  98. break;
  99. case StarDirection.LeftAndUP:
  100. destPos.x = -(i % mColum) * prefabWidth + i * mColumnSpace;
  101. destPos.y = (i / mColum) * (prefabHeight + mRowSpace);
  102. break;
  103. }
  104. card.transform.localPosition = destPos;
  105. elements.Add(card);
  106. }
  107. }
  108. public Vector2 GetSizeDelta()
  109. {
  110. RectTransform rect = mPrefab.GetComponent<RectTransform>();
  111. float prefabWidth = rect.sizeDelta.x;
  112. float prefabHeight = rect.sizeDelta.y;
  113. float x = 0, y = 0;
  114. if (StarNum % mColum == 0)
  115. {
  116. x = mColum * (prefabWidth + mColumnSpace);
  117. }
  118. else
  119. {
  120. x = (StarNum % mColum) * (prefabWidth + mColumnSpace);
  121. }
  122. y = Mathf.CeilToInt(StarNum / mColum) * (prefabHeight + mRowSpace);
  123. return new Vector2(x, y);
  124. }
  125. }
  126. public enum StarDirection
  127. {
  128. /// <summary>
  129. /// 左下角对齐,向右向上发展
  130. /// </summary>
  131. RightAndUp,
  132. /// <summary>
  133. /// 左上角对齐,向右向下发展
  134. /// </summary>
  135. RightAndDown,
  136. /// <summary>
  137. /// 右上角角对齐,向左向下发展
  138. /// </summary>
  139. LeftAndDown,
  140. /// <summary>
  141. /// 右下角角对齐,向左向上发展
  142. /// </summary>
  143. LeftAndUP,
  144. }