Unity中sizeDelta的真正含义

一:前言

获取UI的长宽,可以使用sizeDelta,但是Unity官方对于sizeDelta是这样解释的:Anchors在同一点的时候,sizeDelta相当于获取长宽,但是Anchors不在同一点时,表示的只是UI真实大小比Anchors矩形大多少

offsetMax = ui矩形右上角坐标 - 锚点矩形右上角坐标
offsetMin = ui矩形左下角坐标 - 锚点矩形左下角坐标

sizeDelta = offsetMax - offsetMin;
=>
sizeDelta = ((ui矩形右上角坐标 - 锚点矩形右上角坐标) - (ui矩形左下角坐标 - 锚点矩形左下角坐标));

上面的公式其实是sizeDelta的真实含义,这就解释了为什么当Anchors在同一个点的时候相当于获取UI元素的宽高,因为Anchors在同一个点的时候锚点矩形的右上角坐标和左下角坐标是一样的,sizeDelta相当于ui矩形右上角坐标-ui矩形左下角坐标,也就是获取UI元素的宽高


二:使用

为了避免出现与预期不符的效果,通过以下两种方法都可以正确的设置UI大小

——使用UGUI的SetSizeWithCurrentAnchors方法

public void SetRectTransformSize(RectTransform rt, Vector2 size)
{
    rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x);
    rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);
}

——自己计算

public void SetRectTransformSize(RectTransform rt, Vector2 size)
{
    Vector2 oldSize = rt.rect.size;
    Vector2 deltaSize = size - oldSize;
    rt.offsetMin = rt.offsetMin - new Vector2(deltaSize.x * rt.pivot.x, deltaSize.y * rt.pivot.y);
    rt.offsetMax = rt.offsetMax + new Vector2(deltaSize.x * (1f - rt.pivot.x), deltaSize.y * (1f - rt.pivot.y));
}

三:总结

获取UI的宽高时,使用rect.height/width
设置UI的宽高时,使用以上两种方法之一

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello Bug.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值