Unity RectTransform 动态设置大小(资料总结)

问题
针对 UGUI 如何动态获得和设置 RectTransform 的大小,我查阅了大量资料并实测,总结出下列结论,后人直接使用即可。

结论

  1. 经测验,大多数资料说的 RectTransform.sizeDelta {get; set} 不能在所有情况下准确表示当前 UI 所在的矩形的大小。它受到 Anchor 的影响,仅当 Anchor 四个值重合(一致、相同、together)时才相等,即如下图的情况。
    四个值重合的 Anchor
    官方对 RectTransform.sizeDelta 的解释:
    https://docs.unity3d.com/ScriptReference/RectTransform-sizeDelta.html

  2. 经测验,RectTransform.rect {get} 表示基于当前 Anchor 和 Pivot 的值最终计算出的矩形范围。故用 RectTransform.rect.size 可在任意情况下准确返回此 RectTransform 所在的矩形的大小,而不必考虑 Anchor 是否重合的问题。
    帮助得出此结论的资料来源:
    https://blog.lujun.co/2017/09/07/unity_rect_transform/

  3. 上述 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/

发布了4 篇原创文章 · 获赞 0 · 访问量 185

猜你喜欢

转载自blog.csdn.net/xzqsr2011/article/details/104036830
今日推荐