滑动控件问题

时间:2016-04-10 11:39:03

标签: c# android ios unity3d touch

我是编程新手。我正在制作一款测试游戏来学习如何使用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);
}

}

0 个答案:

没有答案