Unity 世界坐标转换为UGUI坐标

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);

猜你喜欢

转载自blog.csdn.net/iningwei/article/details/108832967