我试图沿着x轴和滑动方向移动物体,同时保持在屏幕内部。它应该像用户滑动一样移动距离(就像Ketchapp的冲刺英雄一样)。
这是我目前在更新中的代码:
if (Input.touchCount > 0)
{
if (Input.GetTouch (0).phase == TouchPhase.Began) // Get initial Position
{
playerPos = transform.position;
//playerPos = Camera.main.ScreenToWorldPoint (playerPos);
touchPos = Input.GetTouch (0).position;
touchPos = Camera.main.ScreenToWorldPoint (touchPos);
distance = 0f;
}
else if (Input.GetTouch (0).phase == TouchPhase.Moved)
{
Vector3 pos = Input.GetTouch (0).position;
pos = Camera.main.ScreenToWorldPoint (pos);
distance = pos.x - touchPos.x;
transform.position = new Vector3 (transform.position.x + distance, transform.position.y, transform.position.z);
}
}
这不能正常工作,我是团结的新手。任何帮助将不胜感激。
答案 0 :(得分:0)
这里的问题是TouchPhase.Moved
不止一次发生(手势期间每一帧都会发生)。但是你的代码假定它只被调用一次。
这里有两个选择。
添加touchPos = Input.GetTouch (0).position;
作为TouchPhase.Moved
块的最后一行。这将有效地表明“这个距离已经处理完毕,下一帧将此举视为一个新动作,这是从哪里开始。”
将TouchPhase.Moved
块的最后一行更改为transform.position = new Vector3 (distance, transform.position.y, transform.position.z);
。这将处理每一帧,就好像每个移动都被视为与原始起点的偏移并相应地设置X值。但是,这假设对象从0开始,并始终沿着X轴从0开始。
根据您的使用情况,您可能更喜欢一种方法而不是另一种方法。