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的同学可以尝试下。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值