[UnityUI]RectTransform

相关链接:http://docs.unity3d.com/Manual/class-RectTransform.html


RectTransform组件继承Transform组件,多了两个重要的属性:Pivot(中心点)和Anchors(描点),这两个属性影响UI的位置和宽高。可以通过设置Anchors来使UI控件处于某个相对位置,或者拉伸宽高,从而达到自适应;而Pivot就像是一个参考点,如果对一个UI控件拉伸它的宽度,如果设置中心点在中心位置,那么就会拉伸两边;如果设置中心点在左边,那么就会拉伸右边。


1.Pivot:因为UI是带有"面积的",往往就是一个"面",所以如果我们说把一个UI放在(100,100)的位置,实际上就是从UI中找一个点,把这个点放在(100,100)的位置,而这个点就是Pivot了。

2.Anchors:引入Pivot后,我们只知道了UI的绝对位置,但是很多时候,绝对位置对于我们来说没啥卵用。我们描述一个建筑的位置,往往会说在XX建筑,XX路附近,而不会说在哪个经纬度。前者就是相对位置,后者就是绝对位置了。在解决UI自适应的问题中,我们需要利用相对位置。于是Anchors出现了。



上图中Image的绝对位置就是Canvas的中间,相对位置就是(0,0),这里的相对位置是指Pivot相对于Anchors的位置,由于两者重合,所以为(0,0)。在Transform组件中,显示的位置是相对位置,而RectTransform同理,显示的也是相对位置,所以Inspector面板的PosX,PosY也就是0,0了。


上图中将Anchors设置为Canvas的左下角,因此Image的绝对位置与相对位置是一样的。这里的绝对位置是指Pivot相对于Canvas左下角的位置。


这里要注意的是Anchors有一个"s",学过英语的人都知道这是什么回事!实际上我们的描点是由4个点组成的,上面两图都是4个点重合的情况。在RectTransform组件中,Anchors由两个点组成,(MinX,MinY)和(MaxX,MaxY),取值范围在(0,1),分别代表左下角与右上角,从而构成一个矩形。


上图(MinX,MinY)和(MaxX,MaxY)为(0,0)和(1,1)


上图(MinX,MinY)和(MaxX,MaxY)为(0,0)和(0.5,0.5)


当四个点不重合时,RectTransform组件上面的PosX,PosY,PosZ,Width,Height就会变为Left,Top,PosZ,Right,Bottom,以Left为例,指的是Image左边与描点矩形左边的距离,其他同理。

打开Anchor Presets,会发现有很多按钮,但无需紧张,所有的按钮都只是为了方便的调节Anchors中4个点的位置而已,效果跟直接调节Anchors下的(MinX,MinY)和(MaxX,MaxY)是一样的。


API:

1.

anchoredPosition3D:以描点为原点,该物体的中心点的位置。例如下图中,x > 0, y = 0, z = 0.

同理anchoredPosition也是一样,不过少z轴


2.

pivot & anchorMin & anchorMax:Inspector面板上的值

3.

offsetMin:UI的左下角与描点的左下角的偏移值(以描点的左下角为原点)

offsetMax:UI的右上角与描点的右上角的偏移值(以描点的右上角为原点)

4.

rect:以UI的中心点为原点,返回一个以UI的左下角坐标为起始位置,带有宽高的矩形

5.

sizeDelta:如果四个描点都聚在一起,那么其值就是UI的宽高

6.

GetLocalCorners & GetWorldCorners:获取四个角的坐标

7.

SetSizeWithCurrentAnchors:

SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 300f);   //设置宽为300

SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 300f);   //设置高为300

<think>好的,我现在需要帮助用户了解如何在Unity中修改RectTransform的相关属性或方法。用户可能正在开发UI界面,遇到了调整RectTransform的需求,比如调整位置、大小或旋转。首先,我应该回顾一下自己知道的关于RectTransform的知识,并结合提供的引用资料,确保回答准确。 首先,RectTransformUnity中用于控制UI元素的重要组件,继承自Transform,但专门处理2D界面。用户可能需要知道如何通过代码动态修改属性,比如位置、锚点、尺寸等。根据引用[3],提到了SetSizeWithCurrentAnchors方法,这个方法可以用来调整大小,同时保持当前的锚点设置。这可能是一个关键点,需要详细说明。 接下来,我应该整理RectTransform的主要属性和方法。例如anchoredPosition、sizeDelta、anchorMin和anchorMax,这些属性控制UI元素的位置和大小。引用[1]中提到序列化字段,可能需要在代码中公开这些属性,方便在Inspector中调整,但用户的问题更多是关于代码修改,所以可能需要强调如何在脚本中访问和修改这些属性。 然后,考虑用户可能需要具体的示例代码,比如如何移动UI元素或调整大小。比如,通过修改anchoredPosition来改变位置,或者使用SetSizeWithCurrentAnchors来调整尺寸。引用[3]中的例子提到了计算尺寸和中心点变化,这可能涉及到更复杂的操作,比如拖拽时的实时调整,但用户可能需要基础教程,所以先从简单例子开始。 另外,需要注意RectTransform的坐标系和锚点系统,这可能对初学者来说容易混淆。需要解释锚点如何影响元素的位置和大小,特别是当父元素变化时。例如,如果锚点设置为四角拉伸,修改sizeDelta会直接影响大小,而anchoredPosition的参考点也会不同。 还要检查是否有API文档的推荐,比如Unity官方文档的链接,或者常用的方法列表。引用提供的资料中,引用[3]提到了SetSizeWithCurrentAnchors的使用,可以强调这个方法的作用和参数含义。 最后,生成相关问题,帮助用户深入理解。比如如何动态调整锚点,处理不同分辨率适配,或者旋转UI元素的问题。确保问题覆盖用户可能感兴趣的扩展方向。 总结回答结构:先介绍RectTransform的重要性,再分点讲解关键属性和方法,提供代码示例,结合引用资料中的信息,最后生成相关问题。</think>在Unity中修改$RectTransform$属性是UI开发的核心操作,下面从关键属性、API方法、代码示例三个层面详细说明: ### 一、核心属性解析 1. **锚点控制属性** - `anchorMin`/`anchorMax`:定义父节点矩形内的锚点位置范围(归一化坐标$[0,1]$) - 当锚点设置为四角拉伸模式时,修改`sizeDelta`将直接影响UI元素的大小 2. **位置与尺寸属性** - `anchoredPosition`:基于锚点的中心点坐标(受锚点布局模式影响) - `sizeDelta`:当锚点非拉伸时表示宽高,锚点拉伸时表示相对于父容器的偏移量 $$ \text{拉伸模式尺寸计算:} \quad \text{Width} = \text{parentWidth} \times (\text{anchorMax.x} - \text{anchorMin.x}) + \text{sizeDelta.x} $$ ### 二、关键API方法 | 方法名称 | 作用说明 | |---------------------------------|--------------------------------------------------------------------------| | `SetSizeWithCurrentAnchors` | 保持当前锚点设置调整尺寸(参数:轴向, 数值),引用[3]中拉伸计算的核心方法 | | `GetWorldCorners` | 获取UI四个角的世界坐标(用于碰撞检测等) | | `SetInsetAndSizeFromParentEdge` | 基于父节点边缘设置位置和尺寸 | ### 三、代码实践示例 ```csharp // 修改位置 RectTransform rt = GetComponent<RectTransform>(); rt.anchoredPosition = new Vector2(100, -50); // 向右移动100px,向下移动50px // 动态调整尺寸 rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 300); // 设置宽度为300px rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 150); // 设置高度为150px // 修改锚点范围(居中显示) rt.anchorMin = new Vector2(0.5f, 0.5f); rt.anchorMax = new Vector2(0.5f, 0.5f); rt.sizeDelta = new Vector2(200, 100); // 强制设置固定尺寸 ``` ### 四、官方文档指引 推荐查阅Unity官方文档中的: 1. **RectTransform属性详解**:说明锚点系统的工作原理 2. **屏幕空间与锚点坐标系**:不同Canvas渲染模式下的坐标差异 3. **Layout自动布局组件**:结合ContentSizeFitter等组件实现响应式UI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值