在UGUI中,在兩個Canvas之間進行坐標轉換,從CanvasA下的坐標轉換到CanvasB下。
或者在同一個界面下,從不同的節點下,轉成相同的坐標。
函數定義
public static bool ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);
解釋:
rect:目標界面的節點
screenPoint:要轉換的節點屏幕坐標,如果worldCamera為空就返回 vector2.zero
cam:目標界面的camera,如果 Canvas 的模式為Screen Space - Overlay mode, the cam parameter should be null.
localPoint: 轉換后的坐標點
返回值:判斷此點是否在Rect所在的平面上
最后算出來的結果使用:rectTransform.anchoredPosition = localPoint
要轉的節點屏幕坐標
var screenPoint = canvas.worldCamera.WorldToScreenpoint(obj.transform.position)
通過查看ugui的Slider(滑塊)源碼
void UpdateDrag(PointerEventData eventData ,Camera cam)
{
RectTransformUtility.ScreenPointToLocalPointInRectangle(clickRect,eventData.position,cam,out localcursor)
}