UGUI在两个UI间坐标转换

在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)
}
posted @ 2019-10-10 19:18  赵青青  阅读(3498)  评论(0编辑  收藏  举报