问题
针对 UGUI 如何动态获得和设置 RectTransform 的大小,我查阅了大量资料并实测,总结出下列结论,后人直接使用即可。
结论
-
经测验,大多数资料说的
RectTransform.sizeDelta {get; set}
不能在所有情况下准确表示当前 UI 所在的矩形的大小。它受到 Anchor 的影响,仅当 Anchor 四个值重合(一致、相同、together)时才相等,即如下图的情况。
官方对 RectTransform.sizeDelta 的解释:
https://docs.unity3d.com/ScriptReference/RectTransform-sizeDelta.html -
经测验,
RectTransform.rect {get}
表示基于当前 Anchor 和 Pivot 的值最终计算出的矩形范围。故用RectTransform.rect.size
可在任意情况下准确返回此 RectTransform 所在的矩形的大小,而不必考虑 Anchor 是否重合的问题。
帮助得出此结论的资料来源:
https://blog.lujun.co/2017/09/07/unity_rect_transform/ -
上述
RectTransform.rect
只能 get。若要 set,即动态设置 RectTransform:
(1) 最好让 Anchor 四个数一致,此时直接设置 sizeDelta 即可;
(2) Anchor 不一致时要考虑 offset 和 pivot 的影响:
参考:
https://www.cnblogs.com/AaronBlogs/p/7110227.html(待测试)
https://gameinstitute.qq.com/community/detail/123769
或使用RectTransform.SetInsetAndSizeFromParentEdge()
或RectTransform.SetSizeWithCurrentAnchors()
方法。
其解释和源代码:
https://blog.lujun.co/2017/09/07/unity_rect_transform/