Transform & RectTransform

Transform & RectTransform

Transform 简单介绍

tranform 是unity 中 GameObject(以下简称GO)物体组件的基础。任何一个GO创建时都默认带有。

RectTransform 简单介绍

这个组件是在添加 UI element 之后,物体的transform便会转变为RectTransform。从RectTransform的类也可以看出,这个类是继承了Transform。

从以上两段文字可以看出,rect这几个字母的加入,是因为普通物体变成了UI物体。也可以认为是,从3D场景物体变为2D平面元素。

Transform面板
RectTransform面板

这里是两个组件的debug面板暴漏属性。从面板上看,RectTransform比Transform 多了
Anchor Min、Anchor Max、Anchored Position、 Size Delta、 Pivot几个属性。而且,有些属性,一般来说是不会显示出来。只有在代码中才能访问。

RectTransform 的属性

然后我们先看RectTransform的几个属性。

  1. Anchor Min、Anchor Max
  2. Anchored Position
  3. Size Delta
  4. Pivot

Anchor Min、Anchor Max
从字面意义看,就是锚点的最小、最大值。这两个的值取值范围都是 [0,1]。
RectTransform设置锚点
当点击recttransform视图,我们可以设置锚点的位置。可以看到这是一个二维表格,横向是y的值(top:1,middle:0.5,bottom:0),纵向是x的值(left:0,center:0.5,right:0)。
从这里就可以设置
也就是改变这两个属性的值。比如,当设置 (left,top)时,就是min:(0,1),max:(0,1);
(如果这里min的值比max的值大,则可能不会显示图像,可能的原因是你可以挑其他数值达到显示的效果,但方法很抽象,不寻常)

这里有个注意点,可能很多人容易忽略。
当你改变锚点的位置时,RectTransform的面板是会变的。
如下图

RectTransform 显示 height、left、right,PosY
RectTransform显示PosX、PosY、Width、HeightRectTransform显示PosX-Top-Width-BottomRectTransform显示PosX-Top-Width-Bottom

RectTransform显示PosX、PosY、Width、Height
这里显示数值的切换也是unity人性化的结果。

先解释下这个东西的作用。拿一个image图片举例,
当设置为第一个图的数据。这个图片就会从右上为起点,向左下填充,填充面积为 width380,height100.
当设置第二个图的数据。这个图就会以左侧为边界,向右填充,上下各留50像素的距离。填充宽度是100.

这里还有个pivot。这个属性是对象本身的中心。即哪个点保持不动,然后向其他方向做拉伸、填充。

从以上的解释中可以看到,RectTransform是根据锚点的位置来选择显示的属性的。
Anchor Min、Anchor Max、 Pivot一直显示,而Anchored Position,也就是PosX,PosY,这个二维向量(2D没有Z)与 Size Delta(Width、Height)也是二维向量则选择显示。
“人性化”的为玩家展示更好编辑UI元素位置的属性。

Transform

然后再看Transform 这个组件。
从引擎上来说,这个Transform集成了许多数学知识,二维、三维向量的应用不必说了。然后还有一个欧拉角、四元数。有关欧拉角与四元数的关系,省略。

总的来说,一个物体,不管是3D物体,还是UI物体,都有一个型,这个型的变换,就是基于Transform的。比如缩放就是改变Scale。旋转就是Rotation(不管是欧拉还是四元数变化吧)。位移就是position。即,可以理解为transform就是现实世界物体剔除物理、化学等属性后的数学概念。作用本体。(自己瞎说的,能力有限,这是本人理解。欢迎批评指正)