Home > Mobile >  How can i take only one finger swerve input
How can i take only one finger swerve input

Time:11-27

My project is a Runner game where character constantly moves forward and if player slides left or right, character moves that position too. But in mobile, if i slide with one finger and touch with my other finger in the mean time, character starts to take 2 inputs and move wrong directions.

This is my code below:

private void Update(){
float newz = transform.position.z   movementSpeed * Time.deltaTime;
float newx = 0, swipeDelta = 0;
      
        if(Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            swipeDelta = Input.GetTouch(0).deltaPosition.x / Screen.width;
        }

        newx = transform.position.x   swipeDelta * 5f *Time.deltaTime;

        transform.position = new Vector3(newx, transform.position.y, newz);

}

I have set Input.touchCount to 1 because i want it to get only 1 finger input but it did not work. What should i do to make it work with one finger and make it accurate?

CodePudding user response:

From your code it seems that as soon as you touch with second finger it will just not read location of your first finger.

Input.touchCount == 1 in your if statement looks like a problem for me, it means that if statement will only execute if you have a single finger on your screen. if you change it to Input.touchCount > 0 it will execute even if there are more fingers on the screens and should work correctly since you are already only taking one input with Input.GetTouch(0).

private void Update(){
float newz = transform.position.z   movementSpeed * Time.deltaTime;
float newx = 0, swipeDelta = 0;
  
    if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
    {
        swipeDelta = Input.GetTouch(0).deltaPosition.x / Screen.width;
    }

    newx = transform.position.x   swipeDelta * 5f *Time.deltaTime;

    transform.position = new Vector3(newx, transform.position.y, newz);

}

CodePudding user response:

Changing Input.touchCount == 1 to Input.touchCount > 0 did not solve my problem. I solved it by adding this line of code in the PlayerController script's Start function:

Input.multiTouchEnabled = false;
  • Related