• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Porównywanie dwóch Vector3 z użyciem sqrMagnitude nie działa.

VPS Starter Arubacloud
–1 głos
206 wizyt
pytanie zadane 25 lutego 2016 w OpenGL, Unity przez DL TD Nałogowiec (36,710 p.)
zamknięte 25 lutego 2016 przez DL TD

Witam, piszę skrypt movementu postaci wykorzystując akcelerator w telefonie. Opiszę więc część skryptu, a potem zamieszczę niedziałający kod.

W funkcji Update zrobiłem zmienną o typie float i nadałem jej nazwę "moveHorizontal", gdyż porusza się tylko w prawo i w lewo (stąd ta nazwa). Przypisałem do niej Input.acceleration.x, czyli przy przechylaniu telefonem w prawo i w lewo powinna być przypisywana odpowiednia wartość do zmiennej "moveHorizontal" (w lewo ujemna, a w prawo dodatnia) I tak właśnie się dzieje, więc tutaj wszystko jeszcze działa bez zarzutu. Następnie stworzyłem nowy Vector3 o nazwie "movement", który do pierwszej wartości (czyli na osi X) przyjmuje wartość zmiennej "moveHorizontal", a w Y i Z ma wartość 0f. Tutaj też wszystko działa. W kolejnej linii stworzyłem kolejny Vector3 o nazwie "maxVector" i do osi X przypisałem liczbę 0.5f, a do Y i Z 0f. Teraz następuje problem. Nie umiem porównać Vector3 movement do Vector3 maxVector. Dlaczego? Nie mam pojęcia, używam przecież sqrMagnitude. Dodam, że w if'ie zmieniam wartość dodatnią Vector'a "maxVector" na ujemną czyli (-0.5f, 0f, 0f). If powinien się wykonać jeśli przychylę telefon w lewo o mniej więcej połowę do pionowej orientacji.

Kod w C# wygląda następująco:

void Update () {
          float moveHorizontal = Input.acceleration.x;
          Vector3 movement = new Vector3 (moveHorizontal, 0f, 0f);
          Vector3 maxVector = new Vector3 (0.5f, 0f, 0f);

          if (movement.sqrMagnitude < -maxVector.sqrMagnitude) {
                    Debug.Log (movement + "<" + -maxVector);
          }
}

 

komentarz zamknięcia: Problem został rozwiązany przy pomocy @jeremus. Działający if zamieściłem w komentarzu do odpowiedzi oznaczonej jako najlepsza :)

1 odpowiedź

+1 głos
odpowiedź 25 lutego 2016 przez jeremus Maniak (59,720 p.)
wybrane 25 lutego 2016 przez DL TD
 
Najlepsza
Magnitude  ( długosc wektora), sqrmagnitude ( kwadrat długości? )

na zdrowy rozum przyjmują tylko wartości dodatnie

taki warunek nigdy nie zajdzie

dlugosc1 <  - dlugosc2
komentarz 25 lutego 2016 przez DL TD Nałogowiec (36,710 p.)
W jaki więc inny sposób mogę je porównać?
komentarz 25 lutego 2016 przez jeremus Maniak (59,720 p.)

Nie zajmuję się Unity, ale odpowiedziałem tylko tak na zdrowy rozsądek

może w manualu coś znajdziesz :

http://docs.unity3d.com/ScriptReference/Vector3-sqrMagnitude.html

komentarz 25 lutego 2016 przez DL TD Nałogowiec (36,710 p.)

Dzięki wielkie za sprostowanie, problem wynikł z niedoczytania dokumentacji. Zrobiłem to w prostszy sposób i działa! Dzięki za pomoc w nakierowaniu na problem :) Działający if wygląda więc tak:

if (movement.x < -maxVector.x)
          Debug.Log (movement + "<" + -maxVector);

 

1
komentarz 25 lutego 2016 przez jeremus Maniak (59,720 p.)
jedna współrzędna jak najbardziej może przyjmować wartości ujemne

cieszę się że mogłem pomóc nie mając zielonego pojęcia o Unity :)

Podobne pytania

0 głosów
0 odpowiedzi 417 wizyt
pytanie zadane 3 stycznia 2020 w C# przez Gw0zdziu09 Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 223 wizyt
pytanie zadane 24 lutego 2017 w C i C++ przez rydelek11 Nowicjusz (120 p.)
–3 głosów
1 odpowiedź 200 wizyt
pytanie zadane 12 czerwca 2019 w OpenGL, Unity przez piotrsz109 Stary wyjadacz (13,730 p.)

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...