Долгий тап по экрану для единства движения персонажа

Я хочу реализовать долгое касание экрана. Если пользователь долго нажимает на экран, положение осей x и y уменьшается, и как только он отпускает касание, x увеличивается, а y уменьшается. я кое с чем возился, но не повезло .. вот код, который я пытался.

public class move : MonoBehaviour 
{
    public Vector2 velocity = new Vector2(40,40);
    public float forwardspeed=0.02f;
    Vector2 movement;
    // Use this for initialization
    void Start () 
    {
        Debug.Log("start+"+Input.touchCount);

        movement.x+=(forwardspeed);
        movement.y-=(forwardspeed);
        rigidbody2D.velocity = movement;
    }

    // Update is called once per frame
    void FixedUpdate () 
    {
        int i=0;
        while (i < Input.touchCount)
        {
            // Is this the beginning phase of the touch?
            if (Input.GetTouch(i).phase == TouchPhase.Began)
            {
                Debug.Log("input touch count"+Input.touchCount);
                //  rigidbody2D.gravityScale =0;
                movement.x+=(forwardspeed);
                movement.y+=(forwardspeed);
                rigidbody2D.velocity = movement;
            }
            else if (Input.GetTouch(i).phase == TouchPhase.Ended)
            {
                movement.x += (forwardspeed);
                movement.y -= (forwardspeed);
                rigidbody2D.velocity = movement;
            }
            ++i;
        }
    }
}

person zeeshan dar    schedule 17.09.2014    source источник
comment
Можете уточнить, что именно не работает? Я могу дать несколько общих советов, но я не уверен, в чем ваша проблема.   -  person Zach Thacker    schedule 17.09.2014
comment
он не переходит в режим длительного касания, когда я касаюсь его... он быстро переключается в режим end touchphase.end... есть идеи, как он должен оставаться в режиме begintouch, если мы удерживаем касание и переходим в endmode другим способом.   -  person zeeshan dar    schedule 17.09.2014
comment
Итак, вы пытаетесь сделать так, чтобы, пока пользователь касается экрана, персонаж двигался вверх, а затем, когда он отпускает экран, персонаж двигался вниз?   -  person Zach Thacker    schedule 17.09.2014
comment
Пожалуйста, обратитесь к документации, какие фазы касания использовать docs.unity3d.com/ScriptReference/TouchPhase.html< /а> . То, что вы хотите, вероятно, Moved || Stationary   -  person Imapler    schedule 17.09.2014
comment
@SirBraneDamuj точно .. есть советы?   -  person zeeshan dar    schedule 17.09.2014


Ответы (1)


Вы можете использовать Input.touchCount, чтобы делать именно то, что вам нужно, с помощью очень простого кода.

Если вы хотите, чтобы какое-то поведение происходило, когда пользователь касается экрана, это означает, что вы хотите, чтобы поведение происходило, пока Input.touchCount не равно нулю. Например,

void FixedUpdate() {
    if(Input.touchCount > 0) { //user is touching the screen with one or more fingers
        //do something
    } else { //user is not currently touching the screen
        //do something else
    }
}

В зависимости от вашего кода вы хотели бы установить скорость персонажа на некоторое значение, пока Input.touchCount равно нулю, а затем установить другое значение, пока оно не равно нулю.

void FixedUpdate() {
    if(Input.touchCount > 0) {
        rigidbody2D.velocity = new Vector2(forwardspeed, forwardspeed);
    } else {
        rigidbody2D.velocity = new Vector2(forwardspeed, -forwardspeed);
    }
}

Обратите внимание на отрицательный знак в блоке else. Вместо добавления и вычитания значений, как вы делали раньше, мы просто устанавливаем скорость +/- в зависимости от состояния.

person Zach Thacker    schedule 17.09.2014