Unity内未提供直接的转换函数,需要借助视口坐标中转一下。
在Unity中视口坐标是以左下角为(0,0),右上角为(1,1)的坐标,已知世界坐标获得其对应的视口坐标可以使用:
Vector3 viewPos=Camera.main.WorldToViewportPoint(worldPos);
拿到viewPos后就可以根据当前Canvas的Width、Height,反算出对应的UGUI坐标,下面获得的是以中心点为anchor的ugui坐标
RectTransform canvasRectTrans;
float x = canvasRectTrans.rect.width * viewPos.x - canvasRectTrans.rect.width * 0.5f;
float y = canvasRectTrans.rect.height * viewPos.y - canvasRectTrans.rect.height * 0.5f;
扩展
将屏幕坐标转换为视口坐标:
Vector3 viewPos = Camera.main.ScreenToViewportPoint (Input.mousePosition);
视口坐标转换为世界坐标(需要自己组装视口坐标对应世界坐标的Z值):
var pos=Camera.main.ViewportToWorldPoint(viewPos);