Unity3D-UGUI原理篇RectTransform 组件详解

Posted 恬静的小魔龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D-UGUI原理篇RectTransform 组件详解相关的知识,希望对你有一定的参考价值。

推荐阅读

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

这个系列文章,是为了记录分析UGUI的各种原理:

  • UGUI的渲染模式。
  • UGUI的缩放计算。
  • UGUI的锚点定位。
  • UGUI的层级渲染流程。
  • UGUI的事件触发原理。
  • UGUI的布局自动布局方式。

这是本系列文章的第三篇:
【Unity3D-UGUI原理篇】(一)Canvas 渲染模式
【Unity3D-UGUI原理篇】(二)Canvas Scaler 缩放原理
【Unity3D-UGUI原理篇】(三)RectTransform 组件详解
【Unity3D-UGUI原理篇】(四)Event System Manager 事件与触发
【Unity3D-UGUI原理篇】(五)Auto Layout 自动布局
【Unity3D-UGUI原理篇】(六)使用 UnityEngine.Events 让程序更灵活、稳定

二、RectTransform 组件简介

RectTransform 组件是UGUI对应的UI元素的基本组件,与游戏对象的基本组件Transform相似,RectTransform表示的是一个2D矩形的UI空间。

RectTransform定义了UI元素的位置、旋转、大小、锚点、指点等。

RectTransform组件的属性如下图所示:

PosX、PosY、PosZ对应的是这个UI元素的X、Y、Z的值。
Width、Height对应的是这个UI元素的宽和高。

三、RectTransform 组件Anchors(锚点)

下面就详细的说明Anchors锚点:

属性介绍
Anchor Min物体左下角对齐点,值(0,0)对应父物体中的左下角位置,值(1,1)对应父物体右下角位置
Anchor Max物体右上角对齐点,值(0,0)对应父物体中的左下角位置,值(1,1)对应父物体右下角位置

UI的Anchors锚点,如果父物体也有 RectTransform ,子物体可以依据 Anchor 对齐到父物体,又分为 Min 与 Max 位置,如下图物体四周有4个三角形:

那么Anchor位置坐标的值的关系是什么呢?

当Canvas 下有1张图 Anchor Min 与 Anchor Max 皆为 (0.5 , 0.5),如下左图部分。

如果将Anchor Min调整为(0.3, 0.5) ,Anchor Max调整为 (0.5, 0.7),如下右图部分。

注意看 左图 Pos X、Pos Y、Width、Height ,会改变为 右图 Left、Top、Right、Buttom。

因为当 Anchor 在同一点时,显示的是UI的坐标和大小,当 Anchor 不在同一点时,显示的是UI的 Anchor 矩形填充空间,如下图所示:

上面看完一定还是不了解怎麽运作,让我们来透过实例了解一下。

Canvas 下有5张图,Anchor Min 与 Anchor Max 皆为 (0.5 , 0.5),物体的位置会对齐到父物体的中心,当父物体大小改变时,情形如下:

Canvas 下有1张图,Anchor Min 与 Anchor Max 皆为 (0.0, 1.0),物体的位置会对齐到父物体的左上角,当父物体大小改变时,情形如下,物体会固定在左上角:

Canvas 下有1张图,Anchor Min 为 (0.0, 0.0), Anchor Max 为 (1.0, 0.0),物体的位置会对齐到父物体的左下角与右下角,当父物体大小改变时,情形如下,物体宽度会随著父物体改变:

由上面的几个实例可以知道,子物体会依据所设定 Anchor 对齐到父物体,当父物体大小改变时,透过 Anchor 更新子物体。

上面有提到当我们点选4个三角形调整Anchor时,会出现比例信息,此比例就是子物体在父物体中的缩放比例,比如:

父UI大小(400,350)
子UI大小(120,105)
子UI的Anchor Min为(0.2,0.5),Anchor Max为(0.5,0.8)


然后将父UI的大小调整为一半:(200,175)

子UI的Anchor Min 、 Anchor Max不变,大小变为:(60,62.5)

子UI的宽度=400 X 50% X 30% = 60
子UI的高度=350 X 50% X 30% = 52.5

所以我们可以得知父物体在缩小2倍后,父物体透过子物体的 Anchor 比例更新子物体,通过这种方式可以达到不同屏幕分辨率下自动改变UI大小与位置。

四、RectTransform组件的Anchor Presets

点选 RectTransform 左上角,可以开启Anchor Presets 工具:

这个Anchor Presets 工具列举了常用的定位方式,比如:

靠上横向拉伸、靠中横向拉伸、靠下横向拉伸。

按住Shift 可以连同 Pivot 一起改变,按住 Alt 可以连同位置一起改变。

五、RectTransform组件的Pivot(指点)

物体自身的支点,影响物体的旋转、缩放、位置,改变 UI Pivot 必须先开启控制面板的 Pivot 按钮,如下图:

接下来演示在不同的Pivot值下,UI的缩放旋转情况。

在Pivot模式下,设置Pivot的值为(0.5,0.5):

然后改变UI的大小旋转:

接着设置Pivot的值为(0,1):

然后改变UI的大小旋转:

六、RectTransform组件的蓝图和原始编辑模式


红框标注的地方,左边的按钮是Blue Print Mode(蓝图模式) ,右边的按钮是 Raw Edit Mode(原始编辑模式)。

Blue Print Mode(蓝图模式)

忽略了物体的 Local Rotation 和 Local Scale,方便以原来的旋转与大小调整物体:

Raw Edit Mode (原始编辑模式)

在 Inspector 中调整 Pivot 和 Anchor 时,物体会维持目前的位置与大小(Inspector 中数值部分),调整情形如下,请注意数值部分。

Inspector 中调整 Pivot:

Inspector 中调整 Anchor:

以上是关于Unity3D-UGUI原理篇RectTransform 组件详解的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D-UGUI原理篇RectTransform 组件详解

Unity3D-UGUI原理篇Auto Layout 自动布局

Unity3D-UGUI原理篇Event System Manager 事件与触发

Unity3D-UGUI原理篇使用 UnityEngine.Events 让程序更灵活稳定

Unity3D-UGUI应用篇使用UGUI实现层级菜单

Unity3D-UGUI应用篇使用Image实现进度条动画