RectTransformUtility 是關(guān)于RectTransform的工具類,有幾個(gè)靜態(tài)方法,這里記錄一下每個(gè)方法的用法。
FlipLayoutOnAxis
public static void FlipLayoutOnAxis(RectTransform rect, int axis, bool keepPositioning, bool recursive)
將rect沿x或者y軸翻轉(zhuǎn),(只是位置上的翻轉(zhuǎn),大小方向不變)
注意: keepPositioning為true時(shí),沿自身的pivot進(jìn)行x或者y軸翻轉(zhuǎn),為false時(shí)沿父rect的x或者y軸翻轉(zhuǎn)
recursive 表示是否影響到子物體。
FlipLayoutAxes
public static void FlipLayoutAxes(RectTransform rect, bool keepPositioning, bool recursive)
將rect同時(shí)進(jìn)行x軸和y軸的翻轉(zhuǎn)。其他參數(shù)同上。
PixelAdjustPoint
public static Vector2 PixelAdjustPoint(Vector2 point, Transform elementTransform, Canvas canvas)
將屏幕空間中的給定點(diǎn)轉(zhuǎn)換為像素校正點(diǎn)。只在Canvas 為ScreenSpace,且Canvas 的 Pixel Perfect開啟時(shí)有效。
例如:Vector2 vector2 = RectTransformUtility.PixelAdjustPoint (new Vector2 (30.333f, 30.9001f), trans, canvas);
將可能返回vector2 =(30.3,30.9),將點(diǎn)按像素對齊。
PixelAdjustRect
public static Rect PixelAdjustRect(RectTransform rectTransform, Canvas canvas)
根據(jù)RectTransform返回像素精確的rect。
舉例

Canvas下有個(gè)Image的width為100.1,通過這個(gè)方法,得到的rect的width為100。而通過RectTransform.rect 得到的width為100.1. 即強(qiáng)制Canvas中的元素按畫布對齊。
RectangleContainsScreenPoint
public static bool RectangleContainsScreenPoint(RectTransform rect, Vector2 screenPoint, Camera cam)
矩形是否包含屏幕點(diǎn)
這個(gè)好理解,需要注意的是如果 Canvas的Render Mode為Overlay時(shí),第三個(gè)參數(shù)可不傳。
ScreenPointToLocalPointInRectangle
public static bool ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint)
將一個(gè)屏幕坐標(biāo)轉(zhuǎn)換為給定矩形為坐標(biāo)系的坐標(biāo)
需要注意的是,屏幕坐標(biāo)是以像素為單位,左下角為(0,0),而返回的坐標(biāo)是相對于給定矩形的pivot的坐標(biāo)。
返回值為false表示這個(gè)射線與給定矩形所在的平面沒有交點(diǎn)
ScreenPointToWorldPointInRectangle
public static bool ScreenPointToWorldPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector3 worldPoint)
將一個(gè)屏幕坐標(biāo)轉(zhuǎn)換為給定矩形所在平面(這個(gè)平面是無限大的)的世界坐標(biāo),這個(gè)方法與Camera.ScreenToWorldPoint不同的地方在于,ScreenToWorldPoint方法傳入的是一個(gè)Vector3類型,z軸表示的是到攝像機(jī)的距離,而該方法傳入一個(gè)Vector2型,因此要想得到對應(yīng)的世界坐標(biāo),還需要一個(gè)別的信息,這個(gè)信息就是第一個(gè)參數(shù)rect來提供,rect會確定一個(gè)平面的位置??梢岳斫鉃閺臄z像機(jī)發(fā)出一個(gè)射線,射線與rect所在的平面相交于一點(diǎn),這個(gè)點(diǎn)的世界坐標(biāo)就是結(jié)果。返回值為false表示這個(gè)射線與平面沒有交點(diǎn)
ScreenPointToRay
public static Ray ScreenPointToRay(Camera cam, Vector2 screenPos)
根據(jù)屏幕坐標(biāo)點(diǎn)生成射線
WorldToScreenPoint
public static Vector2 WorldToScreenPoint(Camera cam, Vector3 worldPoint)
世界坐標(biāo)轉(zhuǎn)屏幕坐標(biāo)
與常用的Camera.WorldToScreenPoint略有不同的是,這個(gè)返回一個(gè)Vector2的值,即沒有z值。