Detectar la dirección del gesto deslizante

Ese es mi código para intentar simular un gesto de deslizamiento, así que cuando construyo en el móvil, sé que funcionará. No se registra nada y estoy confundido sobre por qué parece no funcionar. Quiero que se imprima en la consola que o bien cambié RTL (de derecha a izquierda) o LTR (de izquierda a derecha). No veo lo que estoy haciendo mal.

 void Update() { if (Input.GetMouseButtonDown(0)) { startPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); } if (Input.GetMouseButtonUp(0)) { endPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); } if (startPosition != endPosition && startPosition != Vector3.zero && endPosition != Vector3.zero) { float deltaX = endPosition.x - startPosition.x; float deltaY = endPosition.y - startPosition.y; if ((deltaX > 5.0f || deltaX = -1.0f || deltaY <= 1.0f)) { if (startPosition.x < endPosition.x) { print("LTR"); } else { print("RTL"); } } startPosition = endPosition = Vector3.zero; } } 

Puedo detectar algunos problemas en tu código. No es una buena idea comparar Vector3 con == o != . La comparación aproximada está bien. Está utilizando Input.GetMouseButtonDown en una plataforma móvil.

Necesita usar Input.touches para hacer esto. Bucle sobre él, almacenar la posición TouchPhase.Began en TouchPhase.Began y luego la posición final en TouchPhase.Ended . Luego puede usar ambas variables para calcular a qué dirección fue el dedo.

El siguiente código detecta la dirección del deslizamiento incluso cuando el dedo aún no se ha liberado con la ayuda de TouchPhase.Moved . Puede deshabilitarlo habilitando la variable booleana detectSwipeOnlyAfterRelease . También puede modificar SWIPE_THRESHOLD para la sensibilidad.

 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"); } } 
 Try this Out. I hope this helps. void Update(){ if (Input.GetMouseButtonDown(0)){ startPosition = Input.mousePosition; } if (Input.GetMouseButtonUp(0)){ float swipe = startPosition.x - Input.mousePosition.x; } if (swipe < 0) { print("LTR"); } else{ print("RTL"); } } } }