Panel Logowania

BGE/Godot : Grawitacja i RigidBody

napisał : maniek
12
maja
2018
Zaczynamy z pierwszym tutorialem z serii "Użytkownik BGE w Godot". Czyli pierwsze spotkanie Blenderowca w innym silniku. Ma on na celu zmniejszenie zderzenia z rzeczywistością dla użytkowników, którzy całe życie pracowali w Blender Game Engine.
tagi : grawitacja godot rigidbody pierwsza symulacja w godot

Pamiętacie swoje pierwsze kroki w Blender Game Engine? Default'owy Cube - przycisk [P].. Taaadaaaa.. Pierwsza gra uruchomiona. Później coś bardziej złożonego, żeby coś się działo.. Cube przenosiło się do góry, obracało, żeby nie był tak "prosto". Nadawało mu się właściwości fizyczne... RigidBody.. Pod nim dodawało się Plane'a.. Wciskamy P i proszę... Pierwsza interaktywna symulacja 3D uruchomiona, z dumą nazywana grą ;)

Jako wieloletni użytkownik Blendera oraz BGE, mam straszny problem w poruszaniu się i używaniu innych silników gier. (Nie)stety BGE bardzo dużo robi za nas i przyzwyczaja nas do tej wygody, prostoty. Musimy uświadomić sobie, że w innych silnikach 3D takie ułatwienia jak dobrze nam znane kostki logiki, w innych silnikach po prostu nie istnieją. To trzeba po prostu zaprogramować, korzystając z gotowych funkcji i API.
Także zaczynamy z pierwszym tutorialem mającym na celu zmniejszenie zderzenia Blenderowca z innym silnikiem gry. Niestety przyzwyczajenia z Blendera i BGE są bardzo silne w moim przypadku, ale pewnie też u innych. Te przyzwyczajenia są silne do tego stopnia, że jak odpalam sobie np.: Unity lub Godot, to praktycznie nie wiem co mam robić. Ta seria tutoriali ma na celu przekonwertowanie pewnych zachowań znanych nam z BGE do Godot Game Engine.

W pierwszym tutorialu z tej serii, wykonamy bardzo prostą symulację jaką jesteśmy wstanie zrobić w przeciągu kilku sekund w Blenderze. Mianowicie w Godocie wykonamy symulację spadającego Cube'a z fizyką RigidBody. Ja wiem... to wydaje się banalne.. Owszem w BGE jestem pewien, że jesteście wstanie to zrobić w ciągu kilku kliknięć, ale jak otworzycie Godota, nie wiadomo za co się zabrać. Dlatego powstaje ten materiał, abyście mogli się odnaleźć w nowym silniku gry jakim jest  Godot. Zaczynamy!

1. Utworzenie projektu

Odpalamy program Godot i tworzymy nowy projekt o nazwie np.: GravityAndRigidbody. Klikamy przycisk [New Project], wprowadzamy nazwę, wybieramy katalog(możemy kliknąć przycisk [Create Folder] - wtedy zostanie utworzony folder jak nazwa projektu)  i wybieramy [Create & Edit].

Pojawia się nam edytor Godot z widokiem 3D(jeśli nie to przyłączamy klikając ikonę 3D w górze programu)

Ja osobiście troszeczkę zmodyfikowałem layout programu, pod własne przyzwyczajenia - możecie tak samo ustawić, ale to jest kwestia indywidualna : 

Więcej o elementach interfejsu znajdziecie w artykule Godot - Omówienie interfejsu użytkownika tyser.

2. Dodawanie odpowiednich obiektów

Najpierw dodajmy interesujące nas obiekty. Jak możecie przeczytać w artykule Godot : szybki start w dziale "Zarządzanie obiektami", musimy dodać główny obiekt o nazwie [Spatial] (przestrzeń), który będzie rodzicem wszystkich innych obiektów w scenie. 

Następnie w zakładce [Scene] gdzie mamy listę wszystkich nodów, kilkając dwa razy w nazwę noda, możemy zmienić jego nazwę. [Spatial] zmieniamy np.: na [World]. W tym momencie możemy zapisać scenę [CTRL+S], ponieważ Godot bazuje na scenach jako plikach zewnętrznych oraz potrzebne jest to do uruchomienia symulacji. Zapisujemy jako np.: test_gravity.tscn. Teraz dodajmy Cube'a.
Godot jest silnikiem gry, więc nie posiada narzędzi do modelowania zaawansowanych obiektów. Na szczęście posiada możliwość tworzenia prostych, prymitywnych kształtów. Mając zaznaczony nod [World] dodajemy kolejny nod, plusem powyżej listy nodów lub [PPM] -> [Add Child Node]. Z listy dostępnych nodów wyszukujemy [MeshInstance] i dodajemy. [MeshInstance] to nod w którym możemy tworzyć podstawowe obiekty : Plane, Cube, Sphere i inne. W zakładce [Inspector] w polu [Mesh] wybieramy z listy rozwijanej [NewCubeMesh]. Utworzonemu nodowi możemy odrazu zmienić nazwę na [Cube]. No i mamy utworzony pierwszy obiekt.

Przesuńmy naszego Cube'a kilka jednostek wyżej o osi Y (w Godot oś Y to jak w Blenderze oś Z) i oraz obróćmy niestandardowo. Jak przesuwać i obracać obiekty pisałem w artykule : Godot : szybki start 

Teraz analogicznie dodajmy Plane'a. Mając zaznaczony nod [World] dodajmy kolejny nod [MeshInstance], w [Inspector] w polu [Mesh] wybierzmy [NewPlaneMesh] i zmieńmy nazwę noda na [Plane].

Na powiższym screenie, zeskalowałem naszego Plane'a o kilka jednostek

Jeżeli chcemy wogóle zobaczyć czy coś się dzieje, musimy dodać jeszcze jeden obiekt mianowicie kamerę. Mając zaznaczony nod [World] dodajemy nowy nod o nazwie [Camera]. Kamerę odsuwamy od środka i podnosimy tak aby obiekty były w jej zasięgu. Mając zaznaczony obiekt kamery klikamy przycisk [Preview] w oknie 3D.

Teraz uruchomimy silnik gry i zobaczymy czy coś się dzieje. Klikamy przycisk Play - prawdopodobnie pojawi się Wam komunikat :

Komunikat ten oznacza, że w projekcie gry nie mamy jeszcze oznaczonej sceny jako głównej. W Godot, aby uruchomić podgląd gry wymagane jest ustawionie jakieś sceny głównej. Komunikat pyta nas czy chcemy taką scenę oznaczyć oraz że taką scenę możemy zmienić w ustawieniach projektu. Po kliknięciu w przycisk [Select] wybieramy wcześniej zapisaną scenę jako główną czyli "test_gravity.tscn". Po zatwierdzeniu w tym momencie odpali nam się podgląd gry, w którym zobaczymy co przed chwilą stworzyliśmy. Widzimy, że obiekty są na swoich miejscach i praktycznie nic się nie dzieje. A to dlatego, że te obiekty nie mają jeszcze właściwości fizycznych.

3. Dodawanie fizyki obiektom

W pierwszej kolejności zajmijmy się Cube. Musimy sprawić, żeby Cube swobodnie spadał i zachowywał się jak ciało sztywne. Aby obiektowi nadać właściwości dynamiczne, należy dla obiektu Cube nadać rodzica - nod o nazwie [RigidBody]. Obiekt [Rigidbody] powinien być w tym samym miejscu co Cube, więc zrobimy odwrotnie - dodamy nod [RigidBody] jako dziecko Cube, wtedy otrzyma tą samą pozycję i obrót co Cube. Następnie metodą Drag&Drop odwrócimy ich kolejność.

Jak możecie zauważyć przy [RigidBody] widnieje żółty wykrzyknik. Chodzi oto, że nod [RigidBody] do działania potrzebuje noda o nazwie [CollisionShape], czyli kształt kolizji (w BGE to było Collision Bounds), który będzie oddziaływał z innymi obiektami. Tak więc dodajemy nod [CollisionShape] jako dziecko [RigidBody], następnie w zakładce [Inspector] w polu [Shape] wybieramy [NewBoxShape]. Jak dokładnie widzimy [CollisionShape] dodał się dokładnie w miejscu Cube'a oraz pojawiły się punkty kontrolne dzięki którym możemy kontrolować kształt [CollisonShape].

Odpalmy grę i zobaczmy co się dzieje : jak widzimy nasz Cube swobodnie spada, lecz utworzony pod nim Plane wcale go nie zatrzymuje. Dzieje się dlatego, że jak w przypadku Cube, Plane'owi należy dodać kolizję - nod o nazwie [StaticBody]. Mając zaznaczony obiekt Plane dodajemy nowy nod jako dziecko o nazwie [StaticBody]. Jak w przypadku [RigidBody], tu też mamy żółty wykrzyknik, ponieważ [StaticBody] też potrzebuje określenia kształtu kolizji czyli oczekuje noda [CollisionShape]. Dodajemy nod [CollisionShape] jako dziecko [StaticBody] i w polu [Shape] wybieramy [NewPlaneShape].

Teraz jak uruchomimy grę wszystko będzie jak należy.

4. Podsumowanie

Jak widzicie w Blenderze wydaje się to łatwiejsze, ale to Blender przyzwyczaił nas do wygody. Oczywiście w Godocie troszkę inną drogą, ale można uzyskać ten sam efekt. Trochę dłużej, trochę więcej klikania, ale to jest wykonalne i jest kwestią przyzwyczajenia. Na przykład, w Godocie każdemu obiektowi musisz dodać nod [StaticBody] bo inaczej nie będzie reagował z obiektami dynamicznymi. W Blenderze każdy obiekt na starcie już był ustawiony jako Static.

To na razie tyle w tym tutorialu. W tej serii tutoriali chcę właśnie omawiać takie krótkie zagadnienia. Takie, które w BGE zajmują kilka chwil, a w Godocie nie wiadomo do czego się zabrać. Jak macie pomysły, to piszcie w komentarzu..

1 komentarz
Felioz napisał :
godz. 21:58, 20 maja 2018
Klocek ładnie opadł na grunt, dzięki za dobry tutorial :)
Dodaj komentarz
Aby dodać komentarz do newsa, musisz być zalogowany w Serwisie.. Zaloguj