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