Sprawdzanie odległości przesunięcia palcem po ekranie.

Ogólne pytania na temat Unity3D

Sprawdzanie odległości przesunięcia palcem po ekranie.

Postprzez TreektusPL » 30 Gru 2018, 18:50

Witam. Potrzebuję skryptu albo jakiejś podpowiedzi jak mogę sprawdzić odległość przesunięcia palcem po ekranie na telefonie. Ogólnie udało mi się napisać taki kod tylko występuje w nim błąd, ponieważ gdy zaczniemy szybko klikać ekran telefonu dwoma palcami po dwóch różnych stronach ekranu to telefon widzi to jako przesunięcie palcem z jednej strony na drugą, co powoduje błąd.

Kod:
Kod: Zaznacz wszystko
    Vector3 StartPosition;
    Vector3 EndPosition;
    float Delta;
    float DeltaX;

    void UpdateControllers3()
    {
        TrybValue tryb = GetComponent<TrybValue>();

        if (Input.GetMouseButton(0) == true) //Jeśli tylko w jednym miejscu jest dotknięty ekran telefonu.
        {
            if (Input.GetMouseButton(1) == true)//Jeśli ekran telefonu jest dotknięty w 2 różnych miejscach.
            {
                ResetValue(); //Resetuje wartości!
            }
            if (Input.GetMouseButtonDown(0) == true)//Wykonuje się tylko raz, gdy wciskamy przycisk.
            {
                StartPosition.x = Input.mousePosition.x;
            }
            if (StartPosition.x != 0)
            {
                Delta = StartPosition.x - Input.mousePosition.x;
                Delta = Mathf.Abs(Delta);
                Delta /= Screen.dpi;
            }
        }
        if (Input.GetMouseButton(0)==false) //Wykonuje się, jeśli przestaniemy dotykać palcem ekranu, co jest równoznaczne z końcem wykonywania przesunięcia.
        {
            if (Delta > 2)//Sprawdza, czy przesunięcie palca było dość długie.
            {
                Debug.Log("Wykonano prawidłowe przesunięcie!");
            }
            ResetValue();
        }

    }

    public void ResetValue()
    {
        StartPosition.x = 0;
        EndPosition.x = 0;
        Delta = 0;
        DeltaX = 0;
    }


Oczywiście funkcja UpdateControllers3 znajduję się w funkcji Update;
TreektusPL
 
Posty: 25
Rejestracja: 23 Wrz 2018, 20:16
Has thanked: 0 time
Been thanked: 0 time

Re: Sprawdzanie odległości przesunięcia palcem po ekranie.

Postprzez EvilArev » 30 Gru 2018, 21:29

Input.mousePosition zwraca średnią pozycję wszystkich palców, które dotykają ekranu. Musisz się odwołać do Input.touches lub Input.GetTouch - to dedykowane narzędzia do obsługi palców na ekranie. Zawierają sporo informacji, m.in. deltę pozycji od poprzedniej ramki.
EvilArev
 
Posty: 366
Rejestracja: 14 Kwi 2013, 15:32
Has thanked: 0 time
Been thanked: 0 time

Re: Sprawdzanie odległości przesunięcia palcem po ekranie.

Postprzez Mitopek » 31 Gru 2018, 10:23

Robiłem coś podobnego ostatnio. Kod sprawdza czy x czy y bardziej urósł/zmalał, aby wywnioskować w którą strone najbardziej przesunięto palcem. Działa napewno przy jednym palcu, nie sprawdzałem narazie możliwych błędów przy wciśnięciu kilku palców naraz, ale wiem, że wtedy ewentualnie wystarczy rozróżnić palce w głębi kodu (zamiast 0 dać getcośtam):

Kod: Zaznacz wszystko
if (Input.touchCount > 0)
        {

            if (!przycisniete)
            {
                print(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position));
                startTouch = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
                startTouch.z = 0;
                przycisniete = true;
            }
        }
        else
        {
            przycisniete = false;
        }
        if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended)
        {
            endTouch = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
            endTouch.z = 0;
            porownaj();
        }
Mitopek
 
Posty: 15
Rejestracja: 03 Mar 2018, 21:54
Has thanked: 0 time
Been thanked: 0 time

Re: Sprawdzanie odległości przesunięcia palcem po ekranie.

Postprzez TreektusPL » 31 Gru 2018, 10:50

EvilArev napisał(a):Input.mousePosition zwraca średnią pozycję wszystkich palców, które dotykają ekranu. Musisz się odwołać do Input.touches lub Input.GetTouch - to dedykowane narzędzia do obsługi palców na ekranie. Zawierają sporo informacji, m.in. deltę pozycji od poprzedniej ramki.


Dzięki, właśnie tego potrzebowałem.
TreektusPL
 
Posty: 25
Rejestracja: 23 Wrz 2018, 20:16
Has thanked: 0 time
Been thanked: 0 time


Wróć do Wsparcie Unity

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 11 gości