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

Unity detect user touch relative to player position

这一切都是在 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 将只是左下角之外的任何内容屏幕。

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

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