Unity ugui的ScrollView控件


由於我經常時間一長就忘記,到要用的時候又要查,又要摸索,很浪費時間,所以寫下這篇文章。

scrollview就是一個能上下或者左右拖動的ui列表,背包、展示多個按鈕等情況的時候會用到。

要組成一個完整能用的ScrollView,需要以下幾個組件:

scroll rect、 mask、各種layout。大致ui層級結構如下:

 

 先說說scroll rect ,這個東西是位於最上面父節點的組件 content屬性下的物體是方各種item的;horizontal和vertical是各種垂直橫行拖動;viewprot顯示item的框,需要有mask組件。

 

然后是content,它下面放各種item1、2、3、4...,想要讓它能自動排列item項,需要有下面那三個組件,選一個就好(這些組件的里面有些默認選項,強烈建議勾都去掉)

自動生成的物體item放在content節點下。

content的大小適不適中,關系到最后的拖動效果。太大的話最后結果會有剩余的空余地方,很不好看;太小的話最后結果可能會造成無論怎么拖動,都看不到所有的item項。

為了應對上述所說的情況,我們要對content物體的rect transform控件進行設置,以下以Vertical layout Group形式進行代碼示例(在這之前,content的豎向大小要設置成最小):

for (int i = 1; i < content.transform.childCount; i++)//除了第0個樣本item,其他都要刪除(如果要多次在這個content下重新生成item的話)
{
    Destroy(content.transform.GetChild(i).gameObject);
}

RectTransform rect = content.GetComponent<RectTransform>();//獲取content的rect transform組件
Dictionary<string, string>.Enumerator it = dic.GetEnumerator();//假設dic是從某某配置表獲取的item具體配置
int index = 0;
while (it.MoveNext())
{
    GameObject btn_item = Instantiate(item.gameObject);
    btn_item.transform.SetParent(content.transform);//一定要先設置父物體,不然生成的item的尺寸會令人蛋疼
    btn_item.transform.localScale = item.transform.localScale;
    btn_item.gameObject.SetActive(true);//item本身默認隱藏
    index++;
    float btn_rect = btn_item.GetComponent<RectTransform>().rect.height;//獲取單個按鈕的高度
    rect.offsetMin = new Vector2(rect.offsetMin.x, -1 * btn_rect * index);//對content的高度進行修改,往下要乘-1
}

這樣就能讓content獲得合適的大小了。如果使用gridlayout的話算法要變一下,要根據item和content的寬度來算。

想要知道設置rect transform大小的其他屬性的方法在另一篇文章里,鏈接:https://www.cnblogs.com/Transmuter/articles/11077520.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM