Tworzę grę, w której używasz pilota rotacyjnego (wie tylko jego rotację) do sterowania samochodem. Mam problem z konwersją Quaternion
(to jest wyjście kontrolera) do obrotu kierownicy. To jest najbliższa do pracy forma wszystkich rzeczy, które wypróbowałem (transform.localRotation to obrót kierownicy):Jak przekonwertować obrót kwaterniona na ruch kierownicy?
void Update() {
transform.localRotation = GvrController.Orientation;
transform.localRotation = new Quaternion(0.0f, 0.0f, transform.localRotation.z, transform.localRotation.w);
}
To oczywiście nie jest dobre rozwiązanie i działa nie tak dobrze. Istnieje bardzo prosta wizualizacja tego, co próbuję wykonać: Domyślna orientacja kontrolera jest skierowana do przodu, tak jak na zdjęciu.
Zasadniczo cały problem polega na tym, jak pominąć wszystkie osie inne niż odpowiedzialne za obracanie (oś 1 na zdjęciu) i zastosować ją do kierownicy. Czy wiesz, jak mogę to zrobić?
EDYTOWANIE: Ponieważ trudno jest wyjaśnić problem bez odpowiedniej wizualizacji, zrobiłem zdjęcia kontrolera i narysowałem na nich oś.
Jest to orientacja domyślne kontrolera:
I to jest, jak to się odbywa w osi oznaczonej na niej:
Prawdopodobnie pomógłbyś, gdybyś podał jakieś dane wejściowe i oczekiwane wyniki, aby lepiej zrozumieć obrót, jaki daje kontroler. – FINDarkside
Tak, te są nieprzyjemne do debugowania. Zaleciłbym nagrywanie przebiegów testowych z przybliżonymi znanymi oczekiwanymi kątami wyjściowymi, następnie można "odwrócić inżynierię" poprawnej formuły w dowolnym środowisku programistycznym, takim jak Matlab lub Python Spyder, a następnie przenieść ją do pożądanego języka/frameworka. – NikoNyrh
Czy możesz dać nam nagranie z konwersją Eulera? –