Gra typu Balance cz.3

Witam w kolejnej części tutoriala. Pozwoliłem sobie lekko zmodyfikować wygląd naszej sceny aby lepiej zobrazować. Powiększyłem skrzynki do skali 2x2x2 żeby były łatwiej klikalne. Teraz Moja scena wygląda tak:




Od ostatniej części poradnika wprowadzimy kilka ulepszeń. Pierwsza rzecz na którą powinniśmy zwrócić uwagę jest to że kiedy zaczniemy manipulować jakoś skrzynkami w naszej grze to mogą one naturalnie dostać rotacji w dowolnym kierunku. Ja jednak wybrałem widok 2D więc będziemy się go trzymać. Dlatego musimy umożliwić rotację tylko wokół jednej osi. Aby tego dokonać wystarczy każdy element który jest ruchomy w naszej grze, zaopatrzyć w komponent o nazwie Configurable Joint. Klikamy na zakładkę Component>Physics>Configurable Join:


Teraz kiedy mamy już ten komponent w każdym ruchomym obiekcie (w naszej scenie to 2 skrzynie i równoważnia), musimy zablokować ruch wokoło osi X oraz Y. Wystarczy zmienić Angular XMotion oraz Angular YMotion na Locked:




Drugim usprawnieniem jest skrócenie naszego kodu o nazwie glownyskrypt który wcześniej dodaliśmy do naszej kamery. Zmiany te pozwolą na większą swobodę w edycji naszych poziomów i po prostu ułatwią nam życie. Nie będzie potrzeby zmieniać skryptu za każdym razem kiedy dodamy jakąś skrzynię. Dotychczas musielibyśmy dopisywać po 2 linijki do każdej dodanej skrzyni aby sprawdzać czy naciśnięto dokładnie tą z podaną nazwą i usunąć ją z gry. Teraz poprzez dodanie znacznika (Tag), skrypt zostanie skrócony. Będziemy mogli dodać nawet 30 skrzyń a skrypt się nie zmieni.
Aby dodać Tag musimy zaznaczyć jakiś obiekt który chcemy oznaczyć (w naszym przypadku to będą czerwone skrzynie). Teraz prawie na samej górze Inspektora znajdziemy zakładkę Tag:


Klikamy na słowo Untagged i wybieramy Add New Tag:


Pojawił nam się Tag Manager:


Zmieniamy Size na 2 i wpisujemy do pierwszego elementu jakieś wybrane słowo (ja wybrałem czerwony):


Teraz kiedy mamy już znacznik możemy go ustawić do każdej skrzyni. Wystarczy pamiętać przy tworzeniu skrzyń aby każda miała ten sam znacznik i nie powinno być żadnych problemów.
Teraz musimy edytować nasz skrypt glownyskrypt znajdujący się w naszej kamerze. Nowy skrypt ma taką postać:



Zamieniliśmy wyszukiwanie po nazwie na wyszukiwanie po określonym tagu. Dwie zmienne z góry już nie były więcej potrzebne.

Dodajmy do naszej gry kilka nieotagowanych zielonych skrzyń. To one będą naszym celem w grze. Muszą się utrzymać na naszej belce a wszystkie czerwone skrzynie musimy usunąć:



Jeżeli fizyka gry nam nie odpowiada zawsze można zmienić masę naszych obiektów. Jeżeli równoważnia zbyt szybko i łatwo się przechyla możemy zwiększyć jej masę oraz/lub zmniejszyć masę naszych skrzyń. Możemy również pobawić się grawitacją...zmniejszając ją skrzynie będą wolniej opadały. Aby to zrobić klikamy w zakładkę Edit>Project Settings>Physics:


I możemy edytować Gravity według naszych upodobań. Standard to -.9.81 czyli grawitacja ziemska:


Następnym ważnym krokiem w prawidłowym ustaleniu celu naszej gry, jest zastanowienie się co ma się stać, kiedy już wszystkie nasze czerwone skrzynie zostaną usunięte. W naszym przypadku:
-sprawdzenie czy jeszcze zostały jakieś czerwone skrzynie (po każdym usunięciu czerwonej skrzyni)
-jeżeli nie ma, to czekamy z 5 sekund standardowo przed sprawdzeniem ruchomości pozostałych obiektów
- sprawdzenie każdy z obiektów który powinien pozostać w grze nie porusza się
- jeżeli się nie porusza to odpowiednie info o wygranej

W naszym głownym skrypcie dodajemy odwołanie do innej funkcji która również będzie się w nim znajdować. Nazwiemy ją sprawdzenie:


Dodajemy kilka zmiennych na początek naszego skryptu. Niestety tym razem będzie trzeba wpisać każdą zieloną skrzynię i inne obiekty, chociaż to nie znaczy że można kombinować. Można na przykład sprawdzenie ruchu ograniczyć tylko do naszej równoważni, ale wówczas może się zdarzyć tak że jakieś koło lub cokolwiek, co dodamy w innych poziomach będzie się toczyć po pochylni, lecz sama pochylnia będzie w tym czasie nieruchoma:

Na samym dole wpisujemy nową funkcję o nazwie sprawdzenie. Powodem tego że nie możemy kontynuować wykonywania skryptu w obrębie funkcji Update jest to że dodajemy 5 sekund pauzy, a funkcja Update musi za wszelką cenę odświeżać się co jedną klatkę:

W środku tej funkcji tworzona jest dodatkowa zmienna o nazwie skrzyniaistnieje. Jej zawartością ustalany jest obiekt ze znacznikiem czerwony. Domyślnie jest tak że jeżeli nie ma takiego obiektu, zmienna przyjmuje wartość null czyli nic, zero.
Później mamy warunek if. Wykrzyknik przed nazwą zmiennej stanowi negację, zaprzeczenie. W tym przykładzie możemy tłumaczyć to na ludzki język: jeżeli żadna czerwona skrzynia nie istnieje, to ustal zmienną sprawdz na wartość tak czyli true.

Teraz musimy określić co się stanie po zmianie zmiennej na true i gdzie umieścić dalszą część naszego skryptu. Jak łatwo się domyślić zmienna sprawdz powinna znajdować się w obrębie funkcji Update aby mogła być stale sprawdzana na prawdę/fałsz.

Wpisujemy poniższy warunek na końcu funkcji Update:


Tak więc kiedy sprawdz przyjęło już wartość true wtedy określamy czy któryś z naszych obiektów jest jeszcze w ruchu. W tym celu używamy komendy .rigidbody.IsSleeping() z nazwą naszego obiektu na początku. Każdą taką komendę oddziela znak && co oznacza oraz, również. Czyli każdy z tych warunków musi zostać spełniony aby if otrzymało pozytywny wynik.
Pozwoliłem sobie później umieścić Debug.Log co ułatwia kontrolę nad prawidłowym działaniem skryptu. Kiedy będziemy wpisywać dalszą część skryptu (czyli monit o wygranej rundzie), powinniśmy usunąć tą linię.

Skrypt wygląda teraz tak:



C.D.N

0 komentarze:

Prześlij komentarz