unity的RectTransform

RectTransform继承于Transform,配合Canvas专门交给UGUI使用.控制UI的大小旋转缩放等。

1.Anchor

unity中的ui元素是有严格的父子关系的,子物体的位置是根据父物体的变化而变化的,而子物体和父物体联系的桥梁就是Anchor。在recttransform面板中可以调整锚点的值.min和max表征的是该点所在位置占父物体大小的比例.(默认左下角为0,0点,右上角为1,1点).当锚点重合在一起的时候 无论分辨率是多少,父物体多大,该UI元素的大小是恒定的。所以会出现在采用不同分辨率的时候,该元素的大小恒定,可能就会出现在高分辨率情况下元素太小或者低分辨率情况下元素比屏幕大的情况。

当锚点分散时,UI元素的四个角距离四个对应的锚点的距离是不变的,在这种情况下RectTransform的属性又变为了Left,Top,Posz,Right,Bottom,,其中的PosZ表征的是该元素到父物体在Z轴上的偏移,但并不影响unity的渲染顺序,unity的UI渲染顺序严格执行hierarchy中的UI上下顺序,剩下的四个值应该很好理解了,就是UI元素的每一条边距离父物体的每一条边的距离。如果我们将蓝色的图片(父物体)缩小,我们会发现红色的图片缩小了,但是其每个边距离父物体的距离是不变的,如果在把锚点变回集中的模式,你会发现大小变化了,如果出现下面的情况那就是因为TopBottom的值加起来比父物体的高还要高,所以计算子物体高的时候出现负数的情况,就会出现这种叉叉的情况,只要还原父物体的大小就ok(横向同理)。

2.pivort

Pivot中心点,就是该UI元素旋转缩放的中心点,左下角为(0,0)右上角为(1,1),PosXPosY的值就是Pivot到锚点的值。

3.offsetMax和offsetMin属性

offsetMa就是UI元素的右上角的坐标,减去AnchorMax的值,得到一个从AnchorMax指向元素右上角的向量(vector2类型),这个值是一个可读可写的属性,所以在锚点分开的的情况下我们可以在代码里面动态的去调整UI元素相对边界的距离,其次更重要的是,利用这两个值就可以计算出sizeDelta的值了。offsetMin同理

4.sizeDelta

sizeDelt其实就是offsetMax和offsetMin相减得到的新的向量。在锚点聚集情况下,offsetMax和Min的起点相同,根据向量相减的三角形法则,可以得到一个新的向量,这个新的向量的X和Y的大小正好UI元素的宽和高相等,所以在这个时候去设置sizeDelta的值,可以直接调整UI元素的大小。在锚点分散的情况下,offstMax减去Min,得到的将不再是UI元素的大小,而是一个新的奇怪的向量,这个向量代表的物理意义是,sizeDelta.x值就是锚框的宽度与UI元素的宽度的差值,sizeDelta.y的值就是锚框的的高度与UI元素的高度的差值。所以这个属性之所以叫做sizeDelta,是因为在锚点情况下其表征的是size(大小),在锚框的情况下其表征的是Delta(差值)

5.rect

它是一个只读属性,

不与UI元素所在的位置有关,只和其自身属性相关,所以其中的widthheight属性就可以让我们在任何情况下取得元素的大小。

6.anchoredPosition

在锚点聚集的情况下,anchoredPosition表征的是元素Pivot到Anchor的距离,在锚点分散的情况下,anchoredPosition表征的是元素Pivot到锚框中心点的距离。

7.Recttransform类中一些方法的介绍

(1)SetSizeWithCurrentAnchors(Animations.Axis axis, float size) 无论锚点聚集还是分散情况,都可以通过直接设置rect中的widthheight值来改变UI元素的大小。

(2)GetWorldCorners(Vector3[] fourCornersArray) 使用这个方法,可以取得UI元素四个角的世界坐标,具体使用方法,先建立一个长度为4的vector3数组,然后调用这个方法,把新建的数组作为参数穿进去,调用一次后,数组被赋值,里面的四个元素分别是UI的左下角 ,左上角右上角右下角

(3)SetInsetAndSizeFromParentEdge(RectTransform.Edge edge, float inset, float size)

这个方法就比较冷门了可能,不过还是挺强大的。调用这个方法,可以根据父物体的Edge(某一边)去布局。其中第一个参数就是用于确定基准的边,第二个参数是UI元素的该边界与父物体该边界的距离,第三个元素是设定选定边界轴上UI元素的大小,在使用这个方法的时候要注意锚点也会改变,改变的规则为,边界轴方向的锚点的最大和最小值改变为极值另一个轴的不变。

(4)ScreenPointToWorldPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector3 worldPoint)

屏幕空间点转换为世界空间点,该点在矩形变换的平面上。

(5)ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);屏幕空间点转换为矩形变换颞部的本地位置,该点在矩形变换的平面上。

(6)WorldToScreenPoint(Camera cam, Vector3 worldPoint);世界坐标转化为制定相机的屏幕坐标。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值