Как разделить тачи и свайпы
Друзья, а как можно разделить тачи и свайпы? Идея такая, что при таче надо прыгать, а при свайпе двигаться влево и вправо. А сейчас получается так, что при свайпе(так как TouchCount > 0) и прыгает, и двигается. И не пойму какую проверку поставить. Пробовал velocity == vector3.zero, но не срабатывает.
Код вот такой:
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began )
{
startTouchPosition = Input.GetTouch(0).position;
}
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended)
{
endTouchPosition = Input.GetTouch(0).position;
if (endTouchPosition.x < startTouchPosition.x)
{
rb.AddForce(Vector3.forward * speed, ForceMode.Impulse);
}
if (endTouchPosition.x > startTouchPosition.x)
{
rb.AddForce(Vector3.back * speed, ForceMode.Impulse);
}
}
if (Input.touchCount > 0 && isGrounded && rb.velocity == Vector3.zero)
{
Vector3 targetPosition = new Vector3(1, 2, 0);
targetPosition.Normalize();
rb.velocity = Vector3.zero;
rb.AddForce(targetPosition * jumpHeight * Time.deltaTime, ForceMode.Impulse);
Debug.Log(isGrounded);
}
Ответы (1 шт):
Автор решения: Yaroslav
→ Ссылка
Простой вариант:
// дистанция определяющая что свайп, а что тап
private const float _swipeRange = 10f;
private Vector2 _touchBegan;
private void Update () {
UpdateInput();
}
private void UpdateInput () {
if (Input.touchCount > 0) {
Touch Touch0 = Input.GetTouch(0);
if (Touch0.phase == TouchPhase.Began)
_touchStart = Touch.position;
if (Touch0.phase == TouchPhase.Ended) {
Vector2 TouchVector = Touch0.position-_touchBegan;
if (TouchVector.magnitude < _swipeRange)
Tap();
else {
if (Mathf.Abs(TouchVector.x) > Mathf.Abs(TouchVector.y)) {
if (TouchVector.x > 0)
Swipe(Vector2.right);
else
Swipe(Vector2.left);
} else {
if (TouchVector.y > 0)
Swipe(Vector2.up);
else
Swipe(Vector2.down);
}
}
}
}
}