如何获取 UI 元素的屏幕位置?

Rog*_*llo 2 c# user-interface unity-game-engine

我正在尝试获取 UI 元素的全局位置。

我尝试了很多不同的方法来获得这个职位,但似乎都没有奏效。问题出在锚点上,因为我正在移动它们而不是 UI 元素位置本身(出于解析目的),因此在检查器中显示的 UI 位置始终为 0,0,0。我还尝试获取 anchoredPosition 和 Corners 进行一些计算,但仍然无法正常工作,我总是得到 (0,0,0) 或一些不连贯的数字。

 Vector3 pointToTravel = Camera.main.WorldToScreenPoint(objectRectTransform.anchoredPosition);
Run Code Online (Sandbox Code Playgroud)

这个 'pointToTravel' 变量应该以 ui 元素的像素为单位保存屏幕位置。

der*_*ugo 7

anchoredPosition 是个

此 RectTransform 的枢轴相对于锚参考点的位置。


由于RectTransform继承自Transform您可以简单地使用

Vector3 pointToTravel = Camera.main.WorldToScreenPoint(objectRectTransform.position);
Run Code Online (Sandbox Code Playgroud)

以获得绝对的世界位置。

position你看到在检查总是

  • localPositionfor Transform- 相对于父游戏对象。

    或者

  • anchoredPosition对于RectTransform取决于锚设置-相对于锚定的参考点。


但是,在您的 Canvas 是Screenspace Overlay所有包含的 UI(或更好的RectTransforms)的情况下,已经使用以像素为单位的屏幕空间坐标,因此WorldToScreenPoint不必要或更好地说返回不正确的值。

所以在这种情况下,你可以简单地使用

Vector3 pointToTravel = objectRectTransform.position;
Run Code Online (Sandbox Code Playgroud)