我是编程新手。我正在制作一款测试游戏来学习如何使用Unity中的触控功能。
所以球(球体)是我正在测试的对象。所以我写了一个代码,当我向特定方向滑动球时,我想要移动它。就像我向右滑移动一样是的,如果我向左滑动向左移动。与上下方向相同。
所以它正在工作,但它没有立即响应我的命令。我的意思是如果我做一点滑动它将不会响应。我必须长时间滑动并对屏幕施加压力以便它可以改变有时,这种方式也没有回应。
或者如果我向左滑动然后向下滑动球停止我不知道为什么? 我一直在寻找,但我没有找到答案。
这是我正在使用的代码:
public PlayerMovement ball;
Rigidbody2D player;
public float movespeed;
public float up;
public float smoothTime;
float dragDistance;
Vector2 targetVelocity;
Vector3 fp;
Vector3 lp;
List<Vector3> touchPositions = new List<Vector3>();
void Start () {
player = ball.GetComponent<Rigidbody2D>();
targetVelocity.x = movespeed;
dragDistance = Screen.height * 20 / 100;
}
void Update () {
foreach(Touch touch in Input.touches)
{
if(touch.phase==TouchPhase.Moved)
{
touchPositions.Add(touch.position);
}
if(touch.phase==TouchPhase.Ended)
{
fp = touchPositions[0];
lp = touchPositions[touchPositions.Count - 1];
if(Mathf.Abs(lp.x-fp.x)>dragDistance || Mathf.Abs(lp.y-fp.y)>dragDistance)
{
if(Mathf.Abs(lp.x-fp.x)>Mathf.Abs(lp.y-fp.y))
{
if(lp.x>fp.x)
{
targetVelocity.x = movespeed;
targetVelocity.y = 0;
}
else
{
targetVelocity.x = -targetVelocity.x;
targetVelocity.y = 0;
}
}
else
{
if(lp.y>fp.y)
{
targetVelocity.y = up;
targetVelocity.x = 0;
}
else
{
targetVelocity.y = -targetVelocity.y;
targetVelocity.x = 0;
}
}
}
}
}
}
void FixedUpdate()
{
player.velocity = Vector2.Lerp(player.velocity, targetVelocity, smoothTime);
}
}