这一切都是在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>
答案 0 :(得分:0)
Touch.position在屏幕空间中。 使用Camera.ScreenToWorldPoint转换为Worldspace。
参考: https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html