Unity3d QuickTip – czyli szybkie porady, rozwiązania częstych problemów i sztuczki w Unity3d!
Dzisiejszy odcinek: Jak dodać fizykę do obiektu
Uwaga! Jest to poradnik typu QuickTip. Zatem skupia się on na osiągnięciu założonego celu. Zatem zakładamy że użytkownik zna na tyle program Unity3d, aby samodzielnie wykonać najprostsze czynności, jak np. dodanie modelu kostki do sceny czy dodanie modelowi jakiegoś komponentu. Jeżeli brakuje Ci tej podstawowej wiedzy, zapraszam do tutoriala:
Unity Tutorial – Podstawy
Teoria
Na dziś, tematyka wbrew pozorom bardzo prosta. Jak pewnie łatwo można zauważyć, postawiony w powietrzu Cube, po uruchomieniu gry, będzie wisiał w miejscu, tam gdzie go umieściliśmy. Oczywiście w świecie realnym, chcielibyśmy, żeby taki obiekt spadał, aż natrafi na jakiś grunt. A jeśli będzie to obiekt, np. z gumy, to fajnie jak by się parę razy odbił.
Brzmi to niezmiernie głupio, dlatego, że… co ja wam fizykę będę tłumaczył?
Oddziaływanie grawitacyjne
Aby nasz cube, dostał możliwość spadania, wystarczy jedynie dodać mu komponent Rigidbody. Znajdziemy go np. w menu: [Component -> Physics -> Rigidbody]. I tak naprawdę w tym momencie, nasz obiekt, spadnie na ziemię niczym kamień. Tak samo zdarzy mu się osunąć z równi pochyłej itp. Ogólnie zacznie reagować na fizykę. Ale to nie wszystko co tutaj możemy zrobić, bo oczywiście nasz komponent ma kilka ciekawych atrybutów:
- Mass – Jest to masa naszego obiektu. Nie jest ona podana w kilogramach, a bliżej nieokreślonych jednostkach. Support Unity zaleca, żeby utrzymywać wartość tego parametru między 0 a 10. Większa masa obiektu, może sprawić, że symulacja będzie niestabilna. Do czego nam parametr? Cięższy obiekt, zepchnie lżejszy. Cięższy obiekt NIE spada szybciej od lżejszego! Jest to zależne od wartości grawitacji! Możemy ją zmienić w: [Edit -> Project Settings -> Physics].
- Drag – Pozwala spowolnić obiekt – większa wartość = większe spowolnienie.
- Angular Drag – Również pozwala spowolnić obiekt, jednak tutaj chodzi o szybkość jego obrotu (rotacji)
- Use Gravity – Czy na obiekt ma oddziaływać grawitacja
- Is Kinematic – Jest to parametr, dzięki któremu możemy przejąć kontrolę nad obiektem. Tzn. Na obiekt nie będą oddziaływać siły zewnętrzne jak zderzenie z innym obiektem. Obiekt, który ma ustawioną tą wartość na true, będzie sterowany tylko przez animację czy skrypty. Do czego to wykorzystać? Możemy po śmierci jakiejś postaci, zmienić jej ten parametr na false, czyniąc z niej szmacianą lalkę (ragdoll). Dość popularny manewr w starszych strzelankach
- Interpolate – Parametr pozwalający na “wygładzenie” symulacji fizyki. Tutaj znów mamy wytyczne dokumentacji Unity, która zaleca stosowanie tego, tylko dla głównej postaci, a wyłączone dla reszty obiektów. Dzięki temu możemy uniknąć zanikania obiektów w czasie przemieszczania się głównego bohatera, wynikających z racji, iż grafika i fizyka nie są w 100% zsynchronizowane
- Collision Detection – Jest to metoda wykrywania kolizji. Dla szybko poruszających się obiektów, powinno się używać trybu Continous lub Contiunous Dynamic (Dynamic dla jeszcze szybszych obiektów). Jednak zaleca się nie stosować trybu Continous, jeśli nie mamy problemów z wykryciem kolizji, gdyż obciąża to procesor. Tryby Continous, działają jedynie z colliderami prostymi: Sphere, Box i Capsule
- Freeze Position/Rotation – Zamrożenie osi dla pozycji lub rotacji obiektu. Jak łatwo się domyślić, działa to tak, że obiekt nie porusza się w osiach oznaczonych jako zamrożone.
Właściwie to tyle. Ale wspomniałem o możliwości dodania zachowania obiektu jak np. gumy.
Materiały Fizyczne
Jest to trochę oszustwo, bo pomogą nam w tym standardowe assety Unity. Importujemy sobie paczkę: [Assets -> Import Package -> Physics Materials].
Jak wejdziemy w zaimportowany folder, możemy zobaczyć, że do dyspozycji mamy materiały: Bouncy (Odbijający się), Ice (Lód), Metal (Metalowy), Rubber (Guma), Wood (Drewno). Aby dodać te komponenty, wystarczy postąpić jak z każdym innym komponentem – np. przeciągnąć na obiekt.
Co daje każdy z nich?
- Bouncy – Oczywiście obiekt będzie się odbijał.
- Ice – Obiekt będzie się ślizgał po pochyłych powierzchniach
- Metal – Obiekt nie będzie się bardzo obracał i raczej nie będzie się mocno odbijał
- Rubber – Obiekt nie będzie się ślizgał
- Wood – Obiekt się nie odbija się za mocno
Oczywiście nie są to bardzo precyzyjne określenia, ale najlepiej je samemu przetestować.