RectTransform简析 (2)

就是localPosition的z值。在Inspetor中,把localPostion.xy隐藏了,只暴露了z值出来,因为localPositino的xy值一般不会主动去修改,是通过RectorTranform中这几个额外的属性动态算出来的。

一些预设的常用值,纵向代表y,横向代表x。

RectTransform简析

这两个按钮是蓝图模式和原始模式,蓝图模式就是在Scene中的那个小框是把RectTranform包起来,还是展示通过这几个额外属性确定的矩形(不考虑旋转和缩放)

RectTransform简析


RectTransform简析


原始模式就是在调整anchors和pivot的时候是否需要动态调整sizeDelta和anchoredPosition来保持该节点的矩形区域不变。选中时代表不动态调整。

localPosition与anchoredPosition的关系

  localPosition就是tranform所确定的坐标系原点在父tranform所确定的坐标系下的位置。在RectTransform中,自身所确定的坐标系原点位置在RectTransform确定的矩形的中心。
  所以在RectTranform下,localPosition也可以理解为自身矩形与父节点确定的矩形中心的相对位置(偏移量)。

localPosition与anchoredPosition的转换

  先建立以父节点左下角为原点的坐标系o。
  定义:
  childPivotPos代表子节点中心点在o中的坐标。
  parentPivotPos代表父节点中心点在o中的坐标。
  anchorsPivotPos代表子节点anchors确定的矩形的中心点在o中的坐标。
  则有:
  localPosition.xy
  = childPivotPos - parentPivotPos
  = (childPivotPos - anchorsPivotPos) + (anchorsPivotPos - parentPivotPos)
  = anchoredPosition + (anchorsPivotPos - parentPivotPos)
  = anchoredPosition + anchorsPivotPos相对于父节点中心的偏移量
  接下来就可以实际上进行计算了。
  定义:
  pSize代表父节点的长宽(除了根Canvas外,其他所有的RectTransform所确定的矩形都是依赖于父节点的。所以我们跳过父节点矩形的计算,直接用rect属性获取父节点长宽)。
  pPivot代表父节点的pivot。
  cAnchorsMin、cAnchorsMax、cPivot代表子节点的anchorsMin、anchorsMax、pivot。
  则有:
  parentPivotPos = Vector2.Scale(pSize, pPivot)
  anchorsPivotPos = Vector2.Scale(pSize, cAnchorsMin) + Vector.Scale(pSize, (cAnchorsMax - cAnchorsMin) * cPivot)
  anchorsPivotPos - parentPivotPos = Vector2.Scale(pSize,cAnchorsMin + (cAnchorsMax - cAnchorsMin) * cPivot - pPivot)
  简单测一下,随便调调父节点和子节点的属性。

public class PositionTest : MonoBehaviour { public Vector3 localPosition; public Vector2 anchoredPosition; public Vector3 delta; public Vector3 calculation; // Update is called once per frame void Update() { var parentRectTrans = (transform.parent as RectTransform); var rectTrans = transform as RectTransform; localPosition = rectTrans.localPosition; anchoredPosition = rectTrans.anchoredPosition; //差值 delta = (Vector2)localPosition - anchoredPosition; //通过公式计算的插值 calculation = Vector2.Scale( parentRectTrans.rect.size, rectTrans.anchorMin + (rectTrans.anchorMax - rectTrans.anchorMin) * rectTrans.pivot - parentRectTrans.pivot ); } }

RectTransform简析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxxxp.html