UGUI代码动态UI的大小、尺寸等信息
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的同学可以尝试下。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 如何使vue2路由后退不刷新
- 下一篇: vue-router如何在返回时返回到上次滚动位置 方法集锦