[Unity]屏幕坐标到世界坐标的转换无法正常工作。

この記事は約2分で読めます。
スポンサーリンク

我想做的事情

本文提供了将屏幕坐标(Input.mousePosition)转换为世界坐标时出现故障的解决方案。

前提

画布渲染模式为屏幕空间 – 叠加

获取到的世界坐标用于在用户界面中指定位置。

失败案例

我在网上查找了以下代码并尝试运行,但它不起作用。

(过程本身并没有失败;而是未能获得所需的值。)

Camera.main.ScreenToWorldPoint(Input.mousePosition);
スポンサーリンク

对策?

从其工作方式来看,当使用屏幕空间 – 叠加世界坐标时,世界坐标 = 屏幕坐标。

然而,我查阅了官方文件和其他资料,但没有找到任何明确说明这一点的章节。

スポンサーリンク

对策

如果世界坐标等于屏幕坐标,则无需转换,但由于没有证据,为了安全起见,我在代码中采取了预防措施。

以下代码有效。

Vector2 localPoint;
RectTransformUtility.ScreenPointToLocalPointInRectangle(trans.GetComponent<RectTransform>(), Input.mousePosition, null, out localPoint);
Vector3 v = tf.TransformPoint(new Vector3(localPoint.x, localPoint.y, 0));

这里,第二行(第一个参数)中使用的 `tf` 和第三行中使用的 `tf` 必须是同一个 Transform 类对象。

此外,还需要符合以下条件的物品。

  • 它有一个 RectTransform 组件。
  • 这是一个用户界面

相反,如果它处于非活动状态,也完全没问题。

此外,点击点可以位于目标游戏对象之外。

换句话说,它可以是一个单像素的非活动用户界面,也可以是一个画布。

スポンサーリンク

结果

画布渲染模式为屏幕空间 – 叠加

コメント

タイトルとURLをコピーしました