Unity3d。如何获取 ui 元素的屏幕或世界位置

Unity3d. How to get screen or world position of ui element

我有 UI 个元素(图片等)。 Canvas 连接到相机。 有一个RectTransform,但是如何将这个数据转换为屏幕或世界坐标并得到这个图像的中心点?

尝试了 RectTransform.GetWorldCorners 但它 returns 零向量。

yourRectTransform.rect.center 为局部 space.

中的中心点

yourRectTransform.TransformPoint 转换为世界 space.

奇怪的是 RectTransform.GetWorldCorners 没有按说明工作。根据您需要在 Awake 之后调用的其他答案之一(因此可以进行布局)。

您可以使用 GetWorldCorners,但仅当使用具有实际尺寸的 child 时。我得到了一个 child 世界 space canvas.

的合理值

我发现 GetWorldCorners 和 TransformPoint 都只对 Start() 起作用,对 Awake() 不起作用,好像我们必须等待内容调整大小

    Vector3 min = referenceArea.rectTransform.TransformPoint(referenceArea.rectTransform.rect.min);
    Vector3 max = referenceArea.rectTransform.TransformPoint(referenceArea.rectTransform.rect.max);

    elementToResize.transform.localScale = new Vector3(Mathf.Abs(min.x - max.x) , Mathf.Abs(min.y - max.y), 1f);
    elementToResize.transform.position = referenceArea.rectTransform.TransformPoint(referenceArea.rectTransform.rect.center);

按照 Huacanacha 的指导,

Vector2 _centerPosition = _rectTransform.TransformPoint(_rectTransform.rect.center);

会给你图像中心的世界坐标。