天天看点

UGUI 世界坐标转屏幕坐标转UI坐标

Vector2 world2ScreenPos = Camera.main.WorldToScreenPoint(worldPos);//世界坐标转屏幕坐标
        Vector2 uiPos = new Vector2();
        RectTransformUtility.ScreenPointToLocalPointInRectangle(rect, world2ScreenPos, uirootCamera, out uiPos);//屏幕坐标转UI坐标
        rect.anchoredPosition = new Vector2((uiPos.x) * ui.RectTransform.localScale.x, (uiPos.y) * ui.RectTransform.localScale.x);//赋值           

以上。

---------------------------------------------------------------分割线---------------------------------------------------------------2018-09-10

使用以上方法时注意MainCamera和UICamera的区分。

使用Camera.main时需确保Scene中含有Tag值为MainCamera的相机。

private Vector2 World2UI(Vector3 worldPos)
        {
            Vector2 world2ScreenPos = Camera.main.WorldToScreenPoint(worldPos);
            Vector2 uiPos = new Vector2();
            RectTransformUtility.ScreenPointToLocalPointInRectangle(rect, world2ScreenPos, uirootCamera, out uiPos);
            return uiPos;
        }