C# scrollView個數隨機UI從上部顯示

qq_41063643發表於2017-11-23
using UnityEngine;
using UnityEngine.UI;
using System.Collections;


public class UIPos : MonoBehaviour
{
    /*
     * 解析度  1920*1080  UI大小  1080*180
     * scrollview內顯示數量不確定,根據不同數量讓第一個物品顯示在最上方
     * 
     * 期間因為無滑動條造成下拉或上拉後會返回原位
     * 加上滑動條後就沒有問題了
     * 
     * 可以根據物品大小 解析度不同進行修改
     * 
     * 缺點 需要實時檢測UI個數  耗效能
     */








    [SerializeField]
    int num=1;
    [SerializeField]
    int temp;
    [SerializeField]
    private Transform grid;
    
// Use this for initialization
void OnEnable ()
    {
        Debug.Log(1111);
        grid = transform.Find("content");//賦值 
        num = temp = grid.childCount;//所需顯示個數
        Fit();
        StartCoroutine(FitNumber());
}

    IEnumerator FitNumber()
    {
        while (true)
        {
            temp = grid.childCount;
            if (num != temp)
            {
                Fit();
            }
            yield return 0;
        }
        
            
        
        
    }
    void Fit()
    {
        num = grid.childCount;//所需顯示個數
        if (num * 180 > 1080)//所需顯示物體是否大於螢幕高度
        {
            transform.localPosition = new Vector3(0, 0, 0);//設定遮罩位置為原點


            transform.parent.Find("VerticalScrollbar").GetComponent<Scrollbar>().value = 1;//滑動條迴歸最上方初始位置
        }
        else
        {
            transform.localPosition = new Vector3(transform.localPosition.x, 540 - (180 / 2) * num, transform.localPosition.z);//設定遮罩位置


            this.gameObject.GetComponent<RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 1080 * 2 - 180 * num);//設定遮罩的大小
        }


        grid.GetComponent<RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, num * 180);//設定顯示內容的大小
        
    }
}

相關文章