Unity检测用户相对于玩家位置的触摸

时间:2018-06-03 22:38:19

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

这一切都是在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;
        }
    }
}

屏幕左下角绝对没有任何内容。我可以移动播放器,开始仍然放在左下角。我已经尝试过使用我所知道的玩家的不同组件的位置,这些位置是我想要的位置,仍然是左下角。

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

我曾经设置过Begin = t.position如果t.phase == TouchPhase.Began,它工作得非常漂亮,但我觉得我宁愿让Begin =玩家的位置现在还不能很好。

编辑:我已经开始尝试将Begin设置为transform.position of EVERYTHING(起始平台,主摄像头,不同的碰撞器等)和Begin,除了屏幕的左下角之外,它不会是任何东西。< / p>

1 个答案:

答案 0 :(得分:0)

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

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