我正在尝试获取 UI 元素的全局位置。
我尝试了很多不同的方法来获得这个职位,但似乎都不起作用。问题来自 anchor ,因为我正在移动它们而不是 UI 元素位置本身(为了解决问题),在检查器中显示的 UI 的位置始终是 0,0,0。我还尝试获取 anchoredPosition 和 Corners 来进行一些计算,但它仍然无法正常工作,我总是得到 (0,0,0) 或一些不连贯的数字。
Vector3 pointToTravel = Camera.main.WorldToScreenPoint(objectRectTransform.anchoredPosition);
这个“pointToTravel”变量应该以 ui 元素的像素为单位保存屏幕位置。
最佳答案
position of the pivot of this RectTransform relative to the anchor reference point.
自 RectTransform
继承自 Transform
你可以简单地使用
Vector3 pointToTravel = Camera.main.WorldToScreenPoint(objectRectTransform.position);
为了得到绝对的世界位置。
您在检查器中看到的位置
始终是
localPosition
用于Transform
- 相对于父游戏对象。或
anchoredPosition
用于RectTransform
取决于 anchor 设置 - 相对于 anchor 引用点。
但是如果您的 Canvas 是一个Screen Space - Overlay
,所有包含的 UI(或更好的 RectTransform
)已经使用了屏幕空间以像素 为单位的坐标,因此 WorldToScreenPoint
是不必要的,或者更好的说法是返回不正确的值。
所以在那种情况下你可以简单地使用
Vector3 pointToTravel = objectRectTransform.position;
关于c# - 如何获取 UI 元素的屏幕位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56869568/