RectTransform设置游戏对象大小位置的时候,不仅在Unity编辑器中与Transform不一样,程序控制上也不一样。

RectTransform作为一个组件存在于游戏对象上,所有控制方法和属性都在该组件下。

RectTransform下的rect类可以获取游戏对象的宽(rect.width)和高(rect.height),但是不可以直接设置。

Pivot 轴心和 Anchors 锚点

RectTransform类下的pivot属性可以用于获取和设置游戏对象的轴心。

RectTransform类下的anchorMin和anchorMax属性可以用于获取和设置游戏对象的锚点。

通常修改轴心或者锚点都会让UI的位置或大小发生变化。

offset 锚点偏移

锚点偏移是2个矢量,一个是从左下角的锚点到游戏对象的左下角,一个是从右上角的锚点到游戏对象的右上角。无论当前锚点是形成点,线或者矩形,都能通过这样2个矢量来设置游戏对象的位置和大小。

Unity2019学习:常用功能--RectTransform脚本控制_锚点

SetSizeWithCurrentAnchors

offset锚点偏移用于定位游戏对象比较方便,如果只是设置大小会略显麻烦,特别是在游戏对象进行大小变化的是。这个时候推荐使用SetSizeWithCurrentAnchors方法来设置大小。

SetSizeWithCurrentAnchors方法的第一个参数是选择设置宽(RectTransform.Axis.Horizontal)还是高(RectTransform.Axis.Vertical),第二个参数是具体大小。

rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 200);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 100);

anchoredPosition

anchoredPosition属性是一个矢量,通过该矢量可以获取及设置当前游戏对象的位置。

首先,根据游戏对象的轴心,计算出在锚点矩阵中的参考点位置。

  • 如果是矩阵,则参考点到轴心的矢量即为anchoredPosition。
  • 如果是线段,则锚点矩阵减少一个维度后,参考点的对应位置到轴心的矢量即为anchoredPosition。
  • 如果是点,则是从锚点到轴心的矢量即为anchoredPosition。

Unity2019学习:常用功能--RectTransform脚本控制_UI_02

SetInsetAndSizeFromParentEdge

SetInsetAndSizeFromParentEdge方法是以父游戏对象的上、下、左、右4个点中的一个作为参照,同时设置游戏对象到该点的距离和对应方向上的值。

Unity2019学习:常用功能--RectTransform脚本控制_锚点_03

简单总结

  • 在程序中,修改轴心和锚点比较容易,只是修改完以后,都需要重新设置一下游戏对象的大小和位置。
  • offset锚点偏移设置位置和大小比较方便,但是如果要实现移动或者变形动画就比较麻烦。
  • 变形推荐使用SetSizeWithCurrentAnchors方法,移动推荐使用anchoredPosition属性,因为这2种做法和锚点无关,在任何情况下都能使用。
  • SetInsetAndSizeFromParentEdge可以同时设置位置和大小,但是会修改锚点。仅推荐游戏对象原有参考本身就是父游戏对象4边中间的点的时候使用。


B站视频链接:​​https://www.bilibili.com/video/BV1kh41117xH/​