在UGUI中,在两个Canvas之间进行坐标转换,从CanvasA下的坐标转换到CanvasB下。html
或者在同一个界面下,从不一样的节点下,转成相同的坐标。canvas
函数定义c#
public static bool ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);ide
解释:函数
rect:目标界面的节点ui
screenPoint:要转换的节点屏幕坐标,若是worldCamera为空就返回 vector2.zero3d
cam:目标界面的camera,若是 Canvas 的模式为Screen Space - Overlay mode, the cam parameter should be null.code
localPoint: 转换后的坐标点orm
返回值:判断此点是否在Rect所在的平面上htm
最后算出来的结果使用: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) }