如何将RectTransform(UI面板)转换为屏幕坐标?

时间:2016-12-10 15:17:21

标签: unity3d

我想确定Unity3D中RectTransform的屏幕坐标。考虑到元素可以锚定,甚至缩放,这是如何完成的?

我正在尝试使用RectTransform.GetWorldCorners,然后将每个Vector3转换为屏幕坐标,但值不正确。

public Rect GetScreenCoordinates(RectTransform uiElement)
{
    var worldCorners = new Vector3[4];
    uiElement.GetWorldCorners(worldCorners);
    var result = new Rect(
        worldCorners[0].x,
        worldCorners[0].y,
        worldCorners[2].x - worldCorners[0].x,
        worldCorners[2].y - worldCorners[0].y);
    for (int index = 0; index < 4; index++)
        result[index] = Camera.main.WorldToScreenPoint(result[index]);
    return result;
}

1 个答案:

答案 0 :(得分:5)

虽然帮助说它返回世界空间中的坐标,但实际上它们在屏幕空间中(至少当UI不在世界空间中时)。所以解决方案很简单:

public Rect GetScreenCoordinates(RectTransform uiElement)
{
  var worldCorners = new Vector3[4];
  uiElement.GetWorldCorners(worldCorners);
  var result = new Rect(
                worldCorners[0].x,
                worldCorners[0].y,
                worldCorners[2].x - worldCorners[0].x,
                worldCorners[2].y - worldCorners[0].y);
  return result;
}