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

标签 c# user-interface unity3d

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

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

 Vector3 pointToTravel = Camera.main.WorldToScreenPoint(objectRectTransform.anchoredPosition);

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

最佳答案

anchoredPosition

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/

相关文章:

transform - 让 slerp 像 LookAt(x,Vector3.Right) 一样工作

c# - 如何在 C# 的 System.Type 中返回 System.__COMObject 的类型

user-interface - 用户名表单验证消息

java - 将 JPanels 从其他类添加到 cardLayout

python - 如何阻止matplotlib GUI线程卡住?

android - 统一: Call android function from Unity

c# - 尝试项目示例 "HelloAR",构建成功但手机上没有任何显示

c# - 如何激活由另一个进程启动的窗口

c# - 获取 DNA 子串的原始顺序

c# - Selenium 错误 : No response from server for url http://localhost:7055