【问题标题】:Unity detect user touch relative to player positionUnity 检测相对于玩家位置的用户触摸
【发布时间】:2018-11-13 06:13:13
【问题描述】:

这一切都是在 2D Unity 游戏中完成的。

我正在尝试创建一个 Vector2 来表示用户相对于玩家位置触摸屏幕的位置。这是通过使用另外两个 Vector2 来完成的,一个是玩家位置,另一个是触摸位置。不过,出于某种原因,我实际上是在检测用户相对于屏幕左下角触摸的位置。代码相当简单:

Vector2 Begin;
Vector2 CurTouch;
Vector2 Vec;
...
void Update()
{
    foreach(Touch t in Input.Touches)
    {
        if(t.phase == TouchPhase.Ended) do something with Vec
        else
        {
            Begin = transform.position;
            CurTouch = t.position;
            Vec = CurTouch - Begin;
        }
    }
}

屏幕左下角绝对没有任何内容。我可以移动播放器,但 Begin 仍然放在左下角。我已经尝试使用播放器的不同组件的位置,我知道它们肯定是我想要的位置,仍然是左下角。

transform.position 实际上在 Update() 中的其他地方用于重置玩家跌倒时站起来,我将它们向上移动 1 个单位并将它们的 eulerAngles 重置为 0,并且该代码块可以完美运行,但由于某种原因它只是想要设置 Begin = 到屏幕的左下角。

我曾经设置 Begin = t.position if t.phase == TouchPhase.Began,效果很好,但我决定我宁愿让 Begin = player's position 现在效果不太好。

编辑:我已经开始尝试将 Begin 设置为所有事物的 transform.position(起始平台、主摄像头、不同的对撞机等),并且 Begin 除了屏幕的左下角之外什么都不是。

【问题讨论】:

    标签: c# unity3d vector touch unity3d-2dtools


    【解决方案1】:

    Touch.position 在屏幕空间中。 使用 Camera.ScreenToWorldPoint 转换到 Worldspace。

    参考: https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 2013-03-23
      • 1970-01-01
      相关资源
      最近更新 更多