gpt4 book ai didi

unity3d - (Unity + 2D) 更改 UI 按钮位置问题

转载 作者:行者123 更新时间:2023-12-05 02:05:37 24 4
gpt4 key购买 nike

最近几天我一直在为 Unity 中的一个问题而头疼。

好吧,我不会详细介绍我的游戏,但我做了一个非常简单的例子来说明我的问题。

我有一个 2D 场景这些组件: Basic scene

当场景加载时,我点击这个脚本执行的按钮:

Vector3 pos = transform.position;
pos.x -= 10;
transform.position = pos;

我也试过这段代码:

transform.position = Camera.main.WorldToScreenPoint(new Vector3(0, 0, 0));

问题是,当我单击按钮时,对象的 x-pos 设置为 -1536,这与预期不符。图为点击按钮后的场景。注意 Rect Transform 值: After button click

所以我做了一些谷歌搜索,发现了 ScreenToWorldPoint、WorldToScreenPoint 等,但这些转换都没有解决我的问题。

我很确定我在这里遗漏了一些东西,这可能就在我面前,但我就是想不通是什么。

我希望有人能指出我正确的方向。

最好的问候。

最佳答案

问题是您使用的是 transform.position 而不是 rectTransform.anchoredPosition

虽然 UI 元素确实仍然是 GameObjects 并且确实具有可在脚本中访问的普通 Transform 组件,但您在编辑器中看到的是 的表示>RectTransform 建立在上面。这是 UI 元素的特殊检查器窗口,它使用锚定定位系统,因此您可以指定边缘如何与其父元素对齐。

当您设置 GameObjecttransform.position 时,您提供了一个以 3D 场景单位(默认为米)指定的世界空间位置。这不同于相对于 Canvas 或父 UI 元素的本地位置,在引用像素中指定(引用像素大小由 Canvas 的“引用分辨率”字段确定)。

使用 Camera.WorldToScreenPoint 的一个潜在问题是该函数返回一个以像素为单位指定的位置。然而,如前所述,设置 transform.position 是在场景单位(即默认情况下为米)中指定的,而不是相对于父 UI 元素的。不过,检查器知道它是一个 UI 元素,因此它不会向您显示该值,而是向您显示转换为 UI 本地坐标的世界位置。

换句话说,当您将位置设置为零时,您将获得主相机 View 中恰好位于场景零点上方的任何像素的索引,并将这些像素数转换为米,并将元素移动到那里.编辑器向您显示相对于对象的父 UI 元素的引用像素(不一定是屏幕像素,检查您的 Canvas 设置)的位置。要验证,请尝试稍微倾斜您的相机并注意显示的值会有所不同。

因此您需要再次使用 rectTransform.anchoredPosition,并且您还需要确保 Canvas 分辨率与您的屏幕分辨率相同(或计算差异) .对象的锚定方式对于 rectTransform 值所指的内容也很重要。

关于unity3d - (Unity + 2D) 更改 UI 按钮位置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63383530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com