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 元素的像素为单位保存屏幕位置。
此 RectTransform 的枢轴相对于锚参考点的位置。
由于RectTransform
继承自Transform
您可以简单地使用
Vector3 pointToTravel = Camera.main.WorldToScreenPoint(objectRectTransform.position);
Run Code Online (Sandbox Code Playgroud)
以获得绝对的世界位置。
在position
你看到在检查总是
localPosition
for Transform
- 相对于父游戏对象。
或者
anchoredPosition
对于RectTransform
取决于锚设置-相对于锚定的参考点。
但是,在您的 Canvas 是Screenspace Overlay
所有包含的 UI(或更好的RectTransform
s)的情况下,已经使用以像素为单位的屏幕空间坐标,因此WorldToScreenPoint
不必要或更好地说返回不正确的值。
所以在这种情况下,你可以简单地使用
Vector3 pointToTravel = objectRectTransform.position;
Run Code Online (Sandbox Code Playgroud)