【发布时间】:2019-02-11 00:40:33
【问题描述】:
我正在尝试学习 Unity UI 元素的位置。但是,当我尝试使用此代码 Debug.Log (UI_Text.transform.position); 获取 UI 文本位置时,我得到了这样的高点 (6846.1, 29931.3, 10.0)。在我的代码中,我将 UI 文本 附加为带有 UI_Text 名称的 Gameobject。我也可以使用这两个代码获取 UI 元素的屏幕和世界点:
Debug.Log (Camera.main.WorldToScreen(UI_Text.transform.position));
Debug.Log (Camera.main.ScreenToWorld(UI_Text.transform.position));
这 2 个代码工作正常,给出了场景和世界点,我理解这些。
但我不知道如何使用这个代码Debug.Log (UI_Text.transform.position); 以及这个位置是什么(6846.1、29931.3、10.0)。我怎样才能从像这样的 Camera.main.Something 的相机中获得这个位置?
这是我的Canvas inspector
这里是UI text inspector
【问题讨论】:
-
当您查看场景视图时,您会看到画布是一个大矩形,因此您获得的位置是基于该矩形的世界位置。使用世界位置不一定有意义(尽管有时),通常,您使用锚位置和 sizeDelta 位置的混合。您可以详细说明您想要实现的目标,以便更容易理解。
-
@Everts 我正在使用 Camera.main.ScreenToWorld 将鼠标位置转换为世界位置,并将 GameObject 的位置等同于该位置。但它不适用于 UI 元素
-
您的 UI 画布在世界坐标的哪个位置?它是放在奇怪的地方还是放在 0,0,0 附近?
-
@RonBeyer 我画布的世界位置是 (484.5, 284.0, 0.0)。我猜这是默认位置,因为我无法更改它
-
您的画布渲染模式是在屏幕空间叠加还是世界空间?如果您想在屏幕上创建静止的东西,例如 HUD,您将使用屏幕空间叠加。如果您想在世界本身中显示某些东西,例如敌人上方的浮动生命值条,您将使用世界空间。此外,如果您要提供层次结构和检查器的屏幕截图(选择画布)以及有关玩家在这种情况下将要做什么的一些上下文,这可能会有所帮助。
标签: c# user-interface unity3d canvas