using UnityEngine; using System.Collections; using System.Collections.Generic; public class UI_Star : MonoBehaviour { private GameObject mPrefab; /// /// 行数 /// public int mRow; /// /// 列数 /// public int mColum; /// /// /// public int mRowSpace; /// /// /// public int mColumnSpace; /// /// 对其方式 /// public StarDirection mDirection = StarDirection.RightAndUp; /// /// 设置好星星的显示规则 /// 几行几列 行间距 对其方式啊什么的 /// public void Init(int row, int col, int rspace, int colSpace, StarDirection direction) { mRow = row; mColum = col; mRowSpace = rspace; mColumnSpace = colSpace; mDirection = direction; mPrefab = this.transform.Find("prefab").gameObject; mPrefab.SetActive(false); } /// /// /// private int _curStarNum = 0; /// /// 设置 /// public int StarNum { get { return _curStarNum; } set { if (_curStarNum != value) { _curStarNum = value; onStarNumChanged(); } } } private List elements = new List(); /// /// 显示星星啦啦啦 /// private void onStarNumChanged() { foreach (GameObject ele in elements) { Destroy(ele); } elements.Clear(); RectTransform rect = mPrefab.GetComponent(); float prefabWidth = rect.sizeDelta.x; float prefabHeight = rect.sizeDelta.y; for (int i = 0; i < StarNum; i++) { GameObject card = (GameObject)Instantiate(mPrefab); card.name = i.ToString(); card.SetActive(true); card.transform.SetParent(this.transform); card.transform.localScale = Vector3.one; Vector3 destPos = Vector3.zero; switch (mDirection) { case StarDirection.RightAndUp: destPos.x = (i % mColum) * (prefabWidth + mColumnSpace); destPos.y = -(i / mColum) * (prefabHeight + mRowSpace); break; case StarDirection.RightAndDown: destPos.x = (i % mColum) * prefabWidth + i * mColumnSpace; destPos.y = (i / mColum) * (prefabHeight + mRowSpace); break; case StarDirection.LeftAndDown: destPos.x = -(i % mColum) * (prefabWidth + mColumnSpace); destPos.y = -(i / mColum) * (prefabHeight + mRowSpace); break; case StarDirection.LeftAndUP: destPos.x = -(i % mColum) * prefabWidth + i * mColumnSpace; destPos.y = (i / mColum) * (prefabHeight + mRowSpace); break; } card.transform.localPosition = destPos; elements.Add(card); } } public Vector2 GetSizeDelta() { RectTransform rect = mPrefab.GetComponent(); float prefabWidth = rect.sizeDelta.x; float prefabHeight = rect.sizeDelta.y; float x = 0, y = 0; if (StarNum % mColum == 0) { x = mColum * (prefabWidth + mColumnSpace); } else { x = (StarNum % mColum) * (prefabWidth + mColumnSpace); } y = Mathf.CeilToInt(StarNum / mColum) * (prefabHeight + mRowSpace); return new Vector2(x, y); } } public enum StarDirection { /// /// 左下角对齐,向右向上发展 /// RightAndUp, /// /// 左上角对齐,向右向下发展 /// RightAndDown, /// /// 右上角角对齐,向左向下发展 /// LeftAndDown, /// /// 右下角角对齐,向左向上发展 /// LeftAndUP, }