UGUI代码动态UI的大小、尺寸等信息

来源:互联网 发布:心跳文学部 知乎 编辑:程序博客网 时间:2024/06/06 21:43

Unity是高度可视化编辑工具,但是难免有很多时候我们做UI需要动态创建UI元素,或者修改元素坐标、尺寸、锚点、轴心点等需求

        前段时间正好遇到了这种需求,需要在UI界面上摆放一排带有动画的星星,但是星星的个数和位置是从配置表中读取的,不是固定的,这里我的解决方案是:

1、星星制作预设体

因为星星带有动画等属性,所以肯定是作为预设体放入Resources中动态实例化。

2、添加一个Image作为这些星星的父节点,主要是用来固定星星群的位置,用来做适配的

Image img = imgObj.AddComponent<Image>();       //设置透明度为0       img.color = new Color(0,0,0,1);       //查找父节点       Transform obj = this.transform.Find("BottomUI");       if(null != obj){   //设置父节点(父节点一定要在设置坐标、锚点、轴心点之前,否则会被转化掉)   img.transform.parent = obj.transform;   //设置轴心点   img.rectTransform.pivot = new Vector2(0.5f,0);           //设置本地缩放   img.rectTransform.localScale = new Vector3(1,1,1);   //设置锚点   img.rectTransform.anchorMin = new Vector2(0.5f,0);   img.rectTransform.anchorMax = new Vector2(0.5f,0);           //设置坐标(相对于锚点的坐标,注意rectTransform与Transform中的区别,localPosition是另一坐标系下的概念,这边不能混用)   img.rectTransform.anchoredPosition3D = new Vector3(0,483,0);   //星星个数+(星星个数-1)*间距   float w = maxStarNum*116 + 40*(maxStarNum-1);   //设置宽度和高度(下面两个方法都可以,都收锚点和轴心点的影响)   //img.rectTransform.sizeDelta = new Vector2(w,100);   var rt = img.GetComponent<RectTransform>();     rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, w);     rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 100);


3. 添加星星预设体

         

//添加星星预设体for(int i = 1; i < maxStarNum+1; i++){GameObject star = (GameObject)MonoBehaviour.Instantiate(Resources.Load("UIPrefabs/Star"));//设置坐标star.transform.parent = img.transform;//设置锚点Image starImg = star.transform.GetComponent<Image>() as Image;if(null != starImg){starImg.rectTransform.pivot = new Vector2(0.5f,0.5f);starImg.rectTransform.localScale = new Vector3(1,1,1);starImg.rectTransform.anchorMin = new Vector2(0,0.5f);starImg.rectTransform.anchorMax = new Vector2(0,0.5f);starImg.rectTransform.anchoredPosition3D = new Vector3(((2.0f*i-1)/2.0f*116+40*(i-1)),0,0);}}


总体来说方法很简单,喜欢用代码更灵活的创建UI的同学可以尝试下。

阅读全文
0 0
原创粉丝点击