我想做的事情
本文提供了将屏幕坐标(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 组件。
- 这是一个用户界面
相反,如果它处于非活动状态,也完全没问题。
此外,点击点可以位于目标游戏对象之外。
换句话说,它可以是一个单像素的非活动用户界面,也可以是一个画布。
结果
画布渲染模式为屏幕空间 – 叠加


コメント