用于检测滑动方向的逻辑

时间:2015-01-26 20:05:29

标签: c# unity3d

基本上我要做的是创建一些代码,当触摸在屏幕上滑动时会注册,这样我就可以通过触摸控件移动我的角色。

我所写的内容有时似乎只能起作用,当它发生时它会使角色移动多次。

这是我的代码:

if (Input.touches [0].phase == TouchPhase.Ended) {

        Debug.Log (Input.touches [0].deltaPosition);
        if (Input.touches[0].deltaPosition.y > Input.touches[0].deltaPosition.x || Input.touches[0].deltaPosition.y > (-Input.touches[0].deltaPosition.x))
            movePlayer ("Up");

        if ((-Input.touches[0].deltaPosition.y) > Input.touches[0].deltaPosition.x || (-Input.touches[0].deltaPosition.y) > (-Input.touches[0].deltaPosition.x))
            movePlayer ("Down");

        if ((-Input.touches[0].deltaPosition.x) > Input.touches[0].deltaPosition.y || (-Input.touches[0].deltaPosition.x) > (-Input.touches[0].deltaPosition.y))
            movePlayer ("Left");

        if (Input.touches[0].deltaPosition.x > Input.touches[0].deltaPosition.y || Input.touches[0].deltaPosition.x > (-Input.touches[0].deltaPosition.y))
            movePlayer ("Right");

    }

任何建议都会非常有用

2 个答案:

答案 0 :(得分:0)

一旦做出决定,您就不需要再运行测试了,所以这是使用else ifelse

的理想时间
if()
{
}
else if()
{
}
else
{
}

确保只能执行一个案例。

然而......我认为您的测试存在缺陷。以下不是更合适吗?

var dp = Input.touches[0].deltaPosition;
if(Math.Abs(dp.x) > Math.Abs(dp.y))
{
    //gesture had more horizonal movement
    if(dp.x < 0)
    {
        //left
    }
    else
    {
        //right
    }
}
else
{
    //gesture had more vertical movement
    if(dp.y < 0)
    {
        //up
    }
    else
    {
        //down
    }
}

答案 1 :(得分:0)

我写了this简单的教程,基本上是7行代码,就像一个魅力。简单易用。 你只需要在Unity事件系统中使用te build来编写冗长且无用的代码。 无需使用更新或固定更新。