Unity 代码设置UI尺寸的一种方法

Posted ForXz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 代码设置UI尺寸的一种方法相关的知识,希望对你有一定的参考价值。

在Unity中 UI的实际宽高可以通过rect.size获得,但是这个属性是只读的无法修改。
所以想要修改尺寸,通常有两种方式
方法1:使用rect.SizeDelta来修改UI的大小,而SizeDelta会根据锚点设置的不同变化,数值上也不直观,不便于操作
方法2:使用SetSizeWithCurrentAnchors方法设置宽高

但是突然想用SizeDelta 用公式设置一下

在RectTransform中
rect.min表示物体左下角,相对物体中心(Pivot)为原点的位置
rect.max表示物体的右上角,相对物体中心(Pivot)为原点的位置
offsetMax表示表示物体左下角相对锚点的左下角的偏移
假设锚点左下角的点anchorMinPos是以相对物体中心(Pivot)为原点的位置
那么offsetMin=rect.min-anchorMinPos
同理 offsetMax=rect.min-anchorMaxPos
而sizeDelta=offsetMax-offsetMin;
代入可得
sizeDelta=rect.max-rect.min-(anchorMaxPos-anchorMinPos)
这里可以看出
rect.max-rect.min 表示的就是UI实际宽高的rect.size
sizeDelta=rect.size-(anchorMaxPos-anchorMinPos)
anchorMaxPos-anchorMinPos 表示的就是锚点形成的矩形宽高的vector2
而锚点是随着父物体变化的, 改变物体尺寸时候并不会影响锚点变化,在改变物体尺寸时候rect.size改变的偏移量 等同于sizeDelta改变的偏移量

 public static void SetSize(RectTransform rectTrans, Vector2 newSize)
    
        Vector2 oldSize = rectTrans.rect.size;
        Vector2 offset = newSize - oldSize;
        rectTrans.sizeDelta = rectTrans.sizeDelta + offset;
    

unity中layout是干啥用的

参考技术A Unity里经常设置一些UI图标,比如按钮,文本框,图片框等等。通常是用GUI.BUTTON()类似这种,括号里面要声明这个UI的位置,需要加个Rect()。

而Layout是一种系统自动绘制UI的方法,让你的图标不会重叠位置;就等于默认设置Rect了;
我个人不用这种方法因为大部分的UI还是需要自己设定的。本回答被提问者采纳

以上是关于Unity 代码设置UI尺寸的一种方法的主要内容,如果未能解决你的问题,请参考以下文章

Unity UI 缩放和实例化预制件

Unity实现游戏里鼠标悬停在物体处显示UI提示(介绍名称等信息)的一种方法(可配置的xml文件形式)

Unity c#图像未出现在UI画布面板中

Unity之UI截图和利用Aspose.Words创建表格一起插入到Word中并保存到本地的一种解决方案

unity 如何设置plane的精确尺寸?

Unity3D序列帧动画制作方法---实现加载进度条