[Unity3D] Problem z kołami


#1

Cześć!

Tworze niewielki projekt w ramach samo-szkolenia w Unity3D. Standardowy model jazdy Unity mi wystarczy, dlatego na własnoręcznie wykonany model samochodu przekopiowałem komponenty oryginalnego prefaba samochodu Unity. Koła dodałem wewnątrz Unity jako walce. Problem w tym, że po odpaleniu gry, koła przekręcają się o 90 stopni, przez co model jazdy nie działa poprawnie. Co może być problemem? Bardzo proszę o pomoc kolegów i koleżanek :slight_smile:



#2

O ile dobrze pamiętam WheelCollider obracany jest autorytatywnie w przód GameObjectu, z którym współpracuje, w jego lokalnej przestrzeni (gameObject.transform.forward (os +Z)).
Upewnij się więc, że model twojego pojazdu/kół ustawiony jest tak samo (W przypadku 3D: front +Z, right +X, up +Y, W przypadku z colliderem 2D: front +X, up +Y)
Cały czas mówimy oczywiście o koordynatach w przestrzeni lokalnej, które, o ile nie obracałeś obiektu/rodziców, będą pokrywać się z przestrzenią globalną.

Co do obracania kół z momencie uruchamiania gry.
Zasadniczo nie ma możliwości, żeby w prosty sposób sparentować model kół bezpośrednio do collidera, dlatego stosuje się do tego snippet, jak ten, który zaimportowałeś z samplem…
Skrypt po uruchomieniu gry ustawia pozycję i rotację modelu kół zgodną z colliderem (za pomocą, o ile dobrze pamiętam, WheelCollider.GetWorldPose(…)).
Skrypt nie bierze pod uwagę lokalnej, źródłowej rotacji modelu kół (tj takiej, jaką np. zapisałeś w modelerze).
Jeśli model jest przed uruchomieniem skryptu źle obrócony, to skrypt nie zadziała poprawnie.


#3

Tak myślałem, ale nie zdążyłem sprawdzić w praktyce :stuck_out_tongue: No to teraz mam pewność :slight_smile: Dzięki za pomoc!

[EDIT]

Jest dokładnie tak jak mówiłeś! Teraz mogę sterować moim samochodem jak trzeba :slight_smile: Tak na przyszłość dla tych, którzy będą modelowali samochody w Blenderze pod Unity3D. Wszystkie koła muszą mieć takie same osie Lokalne. Góra opony (powierzchnia bieżnika) to oś Z. Teraz, jeśli moje koło RFwheelMesh jest lustrzanym odbiciem LFwheelMesh względem osi Y, to musiałem RFwheelMesh obrócić W TRYBIE EDIT. Trzeba pamiętać, żeby zrobić to w trybie edycji, bo obracając w trybie obiektowym, obracamy również osie lokalne. Niżej screeny dla zobrazowania :cowboy_hat_face:


Przypominam również, że osie XYZ w Blenderze, nie pokrywają się z osiami XYZ w Unity3D (Oś Z[niebieska] w Blenderze, przedstawiona jest w Unity3D jako oś Y[zielona]).