Разрешайте проводить пальцем только вверх.

#c# #unity3d

Вопрос:

Мой приведенный ниже код работает для обнаружения ударов и добавления силы к моему игровому объекту. Однако моя цель состоит в том, чтобы позволить пользователю проводить пальцем только вверх(может быть вверх влево, вверх вправо, но никогда вниз). Я имею в виду, что только если пользователь проведет пальцем вверх, будет вызван метод AddForce. Когда пользователь проводит пальцем вниз, ничего не произойдет. Возможно ли это сделать, если да, то как?

     public class SwipeScript : MonoBehaviour
{
    Vector2 startPos, endPos, direction;
    float touchTimeStart, touchTimeFinish, timeInterval;
    [Range(0.05f, 1f)]
    public float throwForse = 0.5f;


    void Update()
    {
        
        if (Input.touchCount > 0 amp;amp; Input.GetTouch (0).phase == TouchPhase.Began)
        {
            touchTimeStart = Time.time;
            startPos = Input.GetTouch(0).position;
            
        }
        if (Input.touchCount > 0 amp;amp; Input.GetTouch(0).phase == TouchPhase.Ended)
        {
            
            touchTimeFinish = Time.time;
            timeInterval = touchTimeFinish - touchTimeStart;
            endPos = Input.GetTouch(0).position;
            direction = startPos - endPos;
            GetComponent<Rigidbody2D>().AddForce(-direction / timeInterval * throwForse);
            
        }
    }
}
 

Комментарии:

1. @Palo пожалуйста, не отвечайте в комментариях. Просто просто добавьте ответ на вопрос, ваш ответ совершенно прекрасен.

2. @ЮринУдельман готово

Ответ №1:

Почему бы вам просто не зафиксировать направление, чтобы оно было неотрицательным? Например, перед последней строкой добавьте что-то вроде:

Это было бы для вверх и вправо:

 direction = Vector2.Max(direction, Vector2.Zero); 
 

и это было бы для всех наверху:

 direction = new Vector2(direction.x, Math.Max(direction.y, 0)); 
 

и я предлагаю вам использовать

 direction = endPos - startPos;
 

вместо другого способа, как в вашем исходном коде, так как таким образом он правильно представляет этот вектор движения. Затем AddForce также удалите отрицательный знак direction напротив. Таким образом:

 void Update()
{        
    if (Input.touchCount > 0 amp;amp; Input.GetTouch (0).phase == TouchPhase.Began)
    {
        touchTimeStart = Time.time;
        startPos = Input.GetTouch(0).position;
        
    }
    if (Input.touchCount > 0 amp;amp; Input.GetTouch(0).phase == TouchPhase.Ended)
    {            
        touchTimeFinish = Time.time;
        timeInterval = touchTimeFinish - touchTimeStart;
        endPos = Input.GetTouch(0).position;
        Vector2 direction = endPos - startPos;
        direction = new Vector2(direction.x, Math.Max(direction.y, 0)); 
        GetComponent<Rigidbody2D>().AddForce(direction / timeInterval * throwForse);            
    }
}
 

Комментарии:

1. Я попробовал ваш код, сначала Vector2.Zero должен быть Vector2.zero, потому что я получаю ошибку, когда пишу в верхнем регистре. Во-вторых, ваш код ограничил направления прокрутки, но не так, как я хотел. С помощью вашего кода я могу провести пальцем вверх и вправо, как область L-образной формы. Я не могу провести пальцем вверх влево или влево по экрану.

2. Так что, я думаю, это позволяет нам только проводить пальцем вверх и вправо (что является положительным направлением). Но я также хочу иметь возможность провести пальцем влево

3. О да, похоже, в этом и заключается разница между UnityEngine. Основной модуль. Вектор2 против системы. Цифры. Вектор2. У первого есть «ноль», у другого — «Ноль». Во — первых, чтобы понять вас, значит, вы хотите разрешить любое направление вверх, но не вниз? И хотите ли вы полностью отфильтровать (т. Е. Игнорировать) все нисходящие предположения, как если бы они не возникали, или вы хотите сохранить их горизонтальную часть (слева и справа), но в одной и той же координате Y?

4. Я хочу игнорировать жесты вниз.

5. @asdasdasd Я обновил ответ за игнорирование вниз. У меня нет компилятора C#, но я уверен, что вы справитесь, если в коде есть что-то еще, чего можно коснуться. Хорошего дня.