RectTransformUtility 是关于RectTransform的工具类,有几个静态方法,这里记录一下每个方法的用法。
FlipLayoutOnAxis
public static void FlipLayoutOnAxis(RectTransform rect, int axis, bool keepPositioning, bool recursive)
将rect沿x或者y轴翻转,(只是位置上的翻转,大小方向不变)
注意: keepPositioning为true时,沿自身的pivot进行x或者y轴翻转,为false时沿父rect的x或者y轴翻转
recursive 表示是否影响到子物体。
FlipLayoutAxes
public static void FlipLayoutAxes(RectTransform rect, bool keepPositioning, bool recursive)
将rect同时进行x轴和y轴的翻转。其他参数同上。
PixelAdjustPoint
public static Vector2 PixelAdjustPoint(Vector2 point, Transform elementTransform, Canvas canvas)
将屏幕空间中的给定点转换为像素校正点。只在Canvas 为ScreenSpace,且Canvas 的 Pixel Perfect开启时有效。
例如:Vector2 vector2 = RectTransformUtility.PixelAdjustPoint (new Vector2 (30.333f, 30.9001f), trans, canvas);
将可能返回vector2 =(30.3,30.9),将点按像素对齐。
PixelAdjustRect
public static Rect PixelAdjustRect(RectTransform rectTransform, Canvas canvas)
根据RectTransform返回像素精确的rect。
举例
Canvas下有个Image的width为100.1,通过这个方法,得到的rect的width为100。而通过RectTransform.rect 得到的width为100.1. 即强制Canvas中的元素按画布对齐。
RectangleContainsScreenPoint
public static bool RectangleContainsScreenPoint(RectTransform rect, Vector2 screenPoint, Camera cam)
矩形是否包含屏幕点
这个好理解,需要注意的是如果 Canvas的Render Mode为Overlay时,第三个参数可不传。
ScreenPointToLocalPointInRectangle
public static bool ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint)
将一个屏幕坐标转换为给定矩形里的坐标
需要注意的是,屏幕坐标是以像素为单位,左下角为(0,0),而返回的坐标是相对于给定矩形的pivot的坐标。
即使点在给定矩形外,依然返回true?此处待研究 .
ScreenPointToWorldPointInRectangle
public static bool ScreenPointToWorldPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector3 worldPoint)
将一个屏幕坐标转换为给定矩形里的世界坐标,这个方法与Camera.ScreenToWorldPoint不同的地方在于,ScreenToWorldPoint方法传入的是一个Vector3类型,z轴表示的是到摄像机的距离,而该方法传入一个Vector2型,因此要想得到对应的世界坐标,还需要一个别的信息,这个信息就是第一个参数rect来提供,即rect的位置不同,即使屏幕上的点不变,得到的结果也不同。可以理解为从摄像机发出一个射线,射线与rect的相交与一点,这个点的世界坐标就是结果。
ScreenPointToRay
public static Ray ScreenPointToRay(Camera cam, Vector2 screenPos)
根据屏幕坐标点生成射线
WorldToScreenPoint
public static Vector2 WorldToScreenPoint(Camera cam, Vector3 worldPoint)
世界坐标转屏幕坐标
与常用的Camera.WorldToScreenPoint略有不同的是,这个返回一个Vector2的值,即没有z值。