SWIPE IN UNITY

 void Update () {


    //Example usage in Update. Note how I use Input.GetMouseButton instead of Input.touch

    //GetMouseButtonDown(0) instead of TouchPhase.Began
    if (Input.GetMouseButtonDown(0)) {
        fingerStart = Input.mousePosition;
        fingerEnd  = Input.mousePosition;
    }

    //GetMouseButton instead of TouchPhase.Moved
    //This returns true if the LMB is held down in standalone OR
    //there is a single finger touch on a mobile device
    if(Input.GetMouseButton(0)) {
        fingerEnd = Input.mousePosition;

        //There was some movement! The tolerance variable is to detect some useful movement
        //i.e. an actual swipe rather than some jitter. This is the same as the value of 80
        //you used in your original code.
        if(Mathf.Abs(fingerEnd.x - fingerStart.x) > tolerance || 
           Mathf.Abs(fingerEnd.y - fingerStart.y) > tolerance) {

            //There is more movement on the X axis than the Y axis
            if(Mathf.Abs(fingerStart.x - fingerEnd.x) > Mathf.Abs(fingerStart.y - fingerEnd.y)) {
                //Right Swipe
                if((fingerEnd.x - fingerStart.x) > 0)
                    movements.Add(Movement.Right);
                //Left Swipe
                else
                    movements.Add(Movement.Left);
            }

            //More movement along the Y axis than the X axis
            else {
                //Upward Swipe
                if((fingerEnd.y - fingerStart.y) > 0)
                    movements.Add(Movement.Up);
                //Downward Swipe
                else
                    movements.Add(Movement.Down);
            }

            //After the checks are performed, set the fingerStart & fingerEnd to be the same
            fingerStart = fingerEnd;

            //Now let's check if the Movement pattern is what we want
            //In this example, I'm checking whether the pattern is Left, then Right, then Left again
            Debug.Log (CheckForPatternMove(0, 3, new List<Movement>() { Movement.Left, Movement.Right, Movement.Left } ));
        }
    }

    //GetMouseButtonUp(0) instead of TouchPhase.Ended
    if(Input.GetMouseButtonUp(0)) {
        fingerStart = Vector2.zero;
        fingerEnd = Vector2.zero;
        movements.Clear();
    }


}


SWIPE CLASS


public class SwipeDetector : MonoBehaviour
{
    private Vector2 fingerDown;
    private Vector2 fingerUp;
    public bool detectSwipeOnlyAfterRelease = false;

    public float SWIPE_THRESHOLD = 20f;

    // Update is called once per frame
    void Update()
    {

        foreach (Touch touch in Input.touches)
        {
            if (touch.phase == TouchPhase.Began)
            {
                fingerUp = touch.position;
                fingerDown = touch.position;
            }

            //Detects Swipe while finger is still moving
            if (touch.phase == TouchPhase.Moved)
            {
                if (!detectSwipeOnlyAfterRelease)
                {
                    fingerDown = touch.position;
                    checkSwipe();
                }
            }

            //Detects swipe after finger is released
            if (touch.phase == TouchPhase.Ended)
            {
                fingerDown = touch.position;
                checkSwipe();
            }
        }
    }

    void checkSwipe()
    {
        //Check if Vertical swipe
        if (verticalMove() > SWIPE_THRESHOLD && verticalMove() > horizontalValMove())
        {
            //Debug.Log("Vertical");
            if (fingerDown.y - fingerUp.y > 0)//up swipe
            {
                OnSwipeUp();
            }
            else if (fingerDown.y - fingerUp.y < 0)//Down swipe
            {
                OnSwipeDown();
            }
            fingerUp = fingerDown;
        }

        //Check if Horizontal swipe
        else if (horizontalValMove() > SWIPE_THRESHOLD && horizontalValMove() > verticalMove())
        {
            //Debug.Log("Horizontal");
            if (fingerDown.x - fingerUp.x > 0)//Right swipe
            {
                OnSwipeRight();
            }
            else if (fingerDown.x - fingerUp.x < 0)//Left swipe
            {
                OnSwipeLeft();
            }
            fingerUp = fingerDown;
        }

        //No Movement at-all
        else
        {
            //Debug.Log("No Swipe!");
        }
    }

    float verticalMove()
    {
        return Mathf.Abs(fingerDown.y - fingerUp.y);
    }

    float horizontalValMove()
    {
        return Mathf.Abs(fingerDown.x - fingerUp.x);
    }

    //////////////////////////////////CALLBACK FUNCTIONS/////////////////////////////
    void OnSwipeUp()
    {
        Debug.Log("Swipe UP");
    }

    void OnSwipeDown()
    {
        Debug.Log("Swipe Down");
    }

    void OnSwipeLeft()
    {
        Debug.Log("Swipe Left");
    }

    void OnSwipeRight()
    {
        Debug.Log("Swipe Right");
    }
}


Comentarios

Entradas más populares de este blog

Flutter en iOS: themeMode no cambia a modo oscuro si se usa `ThemeMode.system`

Unity Admob GDPR Compliance, (Easy way)

Admob Unity