触摸和画布元素位置不匹配

Posted

技术标签:

【中文标题】触摸和画布元素位置不匹配【英文标题】:Touch and Canvas element location do not match 【发布时间】:2019-10-27 12:31:06 【问题描述】:

我正在尝试创建像WordCookie 这样的游戏。我想使用 LineRenderer,所以我不能使用 Screen Space - Overlay Canvas Renderer 模式。当使用Screen Space - CameraWorld View 时,我的Touch 位置与我从RectTransforms 获得的位置不匹配。

我通过记录访问按钮的变换位置:

foreach (RectTransform child in buttons.transform)

    Debug.Log("assigning" + child.transform);

对于触摸坐标,我只需记录touch.position

澄清;当位置向量之间的距离小于某个浮点数时,我想触发我的 LineRenderrer。但是,每当我点击我的按钮进行测试时,按钮记录在 (1.2, -2.6),我的触摸记录在 (212.2, 250.4)。

这可能是什么原因造成的?

【问题讨论】:

【参考方案1】:

touch.position 使用像素坐标返回一个值。 为了转换为世界坐标,您需要使用:Camera.ScreenToWorldPoint 应该是这样的:

Vector2 touch = Input.GetTouch(0);
float buttonPositionZ = button.transform.position.z;

Vector3 worldPosition = camera.ScreenToWorldPoint(new Vector3(touch.x, touch.y, buttonPositionZ));

【讨论】:

以上是关于触摸和画布元素位置不匹配的主要内容,如果未能解决你的问题,请参考以下文章

在 HTML 画布上绘制的线条未出现在触摸事件中

缩放和翻译后如何获得相对于画布的触摸坐标?

重新填充画布擦除区域的区域

调度触摸事件到画布上绘制的视图

使用 PointerEvents 在同一目标上检测两个手指触摸

画布可绘制对象和居中缩放