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);
}
}