123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- public class UI_Star : MonoBehaviour
- {
- private GameObject mPrefab;
- /// <summary>
- /// 行数
- /// </summary>
- public int mRow;
- /// <summary>
- /// 列数
- /// </summary>
- public int mColum;
- /// <summary>
- ///
- /// </summary>
- public int mRowSpace;
- /// <summary>
- ///
- /// </summary>
- public int mColumnSpace;
- /// <summary>
- /// 对其方式
- /// </summary>
- public StarDirection mDirection = StarDirection.RightAndUp;
- /// <summary>
- /// 设置好星星的显示规则
- /// 几行几列 行间距 对其方式啊什么的
- /// </summary>
- 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);
- }
- /// <summary>
- ///
- /// </summary>
- private int _curStarNum = 0;
- /// <summary>
- /// 设置
- /// </summary>
- public int StarNum
- {
- get
- {
- return _curStarNum;
- }
- set
- {
- if (_curStarNum != value)
- {
- _curStarNum = value;
- onStarNumChanged();
- }
- }
- }
- private List<GameObject> elements = new List<GameObject>();
- /// <summary>
- /// 显示星星啦啦啦
- /// </summary>
- private void onStarNumChanged()
- {
- foreach (GameObject ele in elements)
- {
- Destroy(ele);
- }
- elements.Clear();
- RectTransform rect = mPrefab.GetComponent<RectTransform>();
- 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<RectTransform>();
- 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
- {
- /// <summary>
- /// 左下角对齐,向右向上发展
- /// </summary>
- RightAndUp,
- /// <summary>
- /// 左上角对齐,向右向下发展
- /// </summary>
- RightAndDown,
- /// <summary>
- /// 右上角角对齐,向左向下发展
- /// </summary>
- LeftAndDown,
- /// <summary>
- /// 右下角角对齐,向左向上发展
- /// </summary>
- LeftAndUP,
- }
|