Notifications
Article
UGUI RectTransform(矩形变换)详解
Published 23 days ago
691
3
本文讲解UGUI RectTransform(矩形变换)。
矩形变换 (Rect Transform) 组件是变换 (Transform) 组件在 2D 布局中的对应组件。变换组件表示单个点,而矩形变换组件表示可包含 UI 元素的矩形。如果矩形变换的父项也是矩形变换,则子矩形变换还可指定子矩形应该如何相对于父矩形进行定位和大小调整。与常规变换一样,矩形变换具有位置、旋转和缩放,但还具有宽度和高度,用于指定矩形的尺寸。
请注意,有些 RectTransform 计算会在帧的末尾进行,即在计算 UI 顶点之前进行,目的是确保与整个帧中执行的所有最新更改保持同步。这意味着在 Start 回调和第一次 Update 回调中尚未进行首次计算。
为解决这一问题,可创建 Start() 回调并向其中添加 Canvas.ForceUpdateCanvases() 方法。这样将强制画布不在帧的末尾更新,而是在调用该方法时进行更新。

调整大小与缩放

使用矩形工具更改对象的大小时,通常对于 2D 系统中的精灵以及对于 3D 对象,该工具将改变对象的局部缩放。但是,在带有矩形变换的对象上使用时,该工具改变的是宽度和高度,局部缩放将保持不变。此大小调整不会影响字体大小、切片图像上的边框等。

轴心

旋转、大小和缩放修改都是围绕轴心进行的,因此轴心的位置会影响旋转、大小调整或缩放的结果。工具栏 Pivot 按钮设置为轴心模式时,可在 Scene 视图中移动矩形变换的轴心。

锚点

矩形变换包含一种称为锚点的布局概念。锚点在 Scene 视图中显示为四个小三角形控制柄,锚点信息也显示在 Inspector 中。
如果矩形变换的父项也是矩形变换,则子矩形变换还可通过各种方式锚定到父矩形变换。例如,子项可以锚定到父项的中心,或锚定到一个角。
通过锚定还可以让子项随父项的宽度或高度一起拉伸。矩形的每个角与其对应的锚点都有一个固定的偏移,即矩形的左上角与左上角锚点有一个固定的偏移,以此类推。因此,矩形的不同角可以锚定到父矩形中的不同点。
锚点的位置以父矩形宽度和高度的一个比例(或百分比)定义。0.0 (0%) 对应于左边或下边,0.5 (50%) 对应于中间,1.0 (100%) 对应于右边或上边。但是,锚点不仅限于侧和中间;它们可以锚定到父矩形内的任何点。
可以单独拖动每个锚点,如果这些锚点在一起,可以通过单击这些锚点的中间位置并进行拖动来一起拖动锚点。如果在拖动锚点时按住 Shift 键,矩形的相应角将与锚点一起移动。
锚点控制柄的一种有用功能是可以自动贴靠到同级矩形的锚点,从而进行精确定位。

锚点预设

在 Inspector 中,可在矩形变换组件的左上角找到 Anchor Preset 按钮。单击该按钮将显示 Anchor Presets 下拉选单。从此选单中可以快速选择一些最常用的锚定选项。可将 UI 元素锚定到父项的边或中间,或者与父项大小一起拉伸。水平锚定和垂直锚定是独立的。
Anchor Presets 按钮将显示当前所选的预设选项(如果有)。如果水平轴或垂直轴上的锚点设置为与任何预设不同的位置,则会显示自定义选项。

Inspector 中的锚点和位置字段

通过单击 Anchors 扩展箭头可显示锚点数值字段(如果这些字段尚不可见)。Anchor Min 对应于 Scene 视图中的左下角锚点控制柄,而 Anchor Max 对应于右上角控制柄。
根据锚点是在一起(产生固定的宽度和高度)还是分开(使得矩形与父矩形一起拉伸),矩形的位置字段显示不同。
当所有锚点控制柄在一起时,显示的字段为 Pos X、Pos Y、Width 和 Height。Pos X 和 Pos Y 值表示轴心相对于锚点的位置。
当锚点分开时,字段可能部分或完全变为 Left、Right、Top 和 Bottom。这些字段定义了由锚点定义的矩形内的填充。如果锚点在水平方向分开,则使用 Left 和 Right 字段,如果在垂直方向分开,则使用 Top 和 Bottom 字段。
请注意,更改锚点或轴心字段中的值通常会反向调整定位值,以使矩形保持原位。如果不需要此行为,请通过单击 Inspector 中的 R 按钮启用 Raw edit mode。这样,在更改锚点和轴心值时可以不改变任何其他值。因此可能会导致矩形在视觉上出现移动或大小调整,因为矩形的位置和大小取决于锚点和轴心值。
Tags:
尹煜
北京宏宇航天技术有限公司Unity工程师 - Programmer
31
Comments
派大双
18 days ago
巨菜的单机游戏开发者
非常好的教程
0
forever
18 days ago
😊
0
hua1
Staff
23 days ago
😁😌
🙂
0