Podsumowanie

W dotychczasowych etapach pracy nad grą stworzyliśmy bohatera i urozmaicone plansze. Bohater może zginąć po zetknięciu się z przeciwnikiem, wejściu na przeszkodę lub upadku z platformy. Potrafi się również odrodzić na początku poziomu. Natomiast, gdy dotrze do końca poziomu, może teleportować się na początek następnego. W grze brakuje jednak rozwiązań, które pozwalałyby zdobywać i gromadzić punkty.

Zdobywanie punktów

R1OdAqdQxTuic1
R1E2CkxvwbmgN1

W pierwszym kroku tworzymy obiekt, którego zebranie będzie powodowało zdobycie punktu, np. wisienki. Tak jak w przypadku innych elementów, dodajemy odpowiednie tekstury i tworzymy animację obiektu (zostało to opisane w e‑materiale Animacje i przejścia między nimi – Unity Hub, etap IIIP1FuGOm8WAnimacje i przejścia między nimi – Unity Hub, etap III.

Gracz powinien mieć możliwość zebrania wielu punktów, dlatego na planszach będziemy rozmieszczać więcej punktowanych obiektów. Warto stworzyć nowy tagtagtag dla tego typu elementów, aby ułatwić sobie późniejszą pracę z nimi w skrypcie.

Chcemy, by gracz zbierał punktowane elementy (tzn. żeby obiekty znikały z planszy po zetknięciu z postacią bohatera). W tym celu użyjemy znanego już z wcześniejszych e‑materiałów komponentu Box Collider 2D. Rozwiązanie to sprawi, że gra wykryje kolizję postaci z punktowanym obiektem. By powtórzyć informacje na temat tego komponentu, przejdź do e‑materiału Wprowadzenie oraz obiekty i kolizje między nimi – Unity Hub, etap IP7fG3v9f5Wprowadzenie oraz obiekty i kolizje między nimi – Unity Hub, etap I.

W skrypcie odpowiedzialnym za postać bohatera używamy ponownie funkcji OnCollisionEnter2D (została ona omówiona w e‑materiale Przerywanie rozgrywki, odradzanie postaci i awans do kolejnego poziomu – Unity Hub, etap VP5wUaQCYbPrzerywanie rozgrywki, odradzanie postaci i awans do kolejnego poziomu – Unity Hub, etap V. Służy ona do sprawdzenia, czy obiekt, z którym wszedł w kolizję bohater, ma przypisany tag punktowanego elementu. Jeśli tak – usuwamy ten obiekt.

Potrzebna jest również funkcja przechowująca liczbę zebranych elementów. Ponieważ będzie to zawsze liczba całkowita, posłużymy sie zmienną typu integer.

R1TaPCt2LRQbb
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Licznik punktów

Zdobywane punkty powinny być nie tylko zliczane, lecz także wyświetlane, tak by użytkownik widział, ile ich zdobył. Aby mu to umożliwić, dodamy licznik punktów.

Chcąc dodać pole tekstowe informujące o liczbie punktów, klikamy w obszarze Hierarchy prawym przyciskiem myszy i z pojawiającego się menu wybieramy pozycję UI, a następnie text. Ustawiamy odpowiednie rozmiar, kolor i położenie napisu. Dodajemy również ikonę – rysunek symbolizujący zebrane punkty. Aby to zrobić, ponownie naciskamy prawy przycisk myszy w obszarze Hierarchy, wybieramy UIImage. W obszarze Incpector klikamy pole Source Image i wybieramy obrazek spośród dodanych wcześniej do projektu tekstur.

W obszarze Hierarchy możemy zobaczyć, że Unity automatycznie utworzy nowy obiekt Canvas. Dzieje się tak, ponieważ program wyświetla tekst, przyciski i panele na płótnach, nakładanych na ekran gry.

Obiekt Canvas jest z tekstem i ikoną w relacji rodzic‑dziecko. Z e‑materiału Przeciwnik – Unity Hub, etap VIPgMaZe8jDPrzeciwnik – Unity Hub, etap VI wiemy, że o takiej sytuacji mówimy wówczas, gdy jeden obiekt zawiera w sobie inne.

Chcemy, by napis w polu tekstowym aktualizował sie po zdobyciu przez gracza punktów. W skrypcie odpowiedzialnym za ruch bohatera gry powołujemy zmienną o typie TextMeshProUGUI, która przechowa obiekt z polem tekstowym. Uwzględniamy ją w kodzie w funkcji odpowiedzialnej za zbieranie punktów.

Uwaga!

Zmienna odpowiedzialna za przechowywanie liczby zebranych punktów jest typu integer, czyli liczbowej. Aby wyświetlić ją jako tekst, używamy funkcji ToString(), która zmieni typ tej wartości.

Ostatnim krokiem tworzenia licznika punktów, jest przeciągnięcie pola tekstowego do obiektu gracz, by zostało przechowane w odpowiedniej zmiennej.

Tak przygotowany obiekt dający punkty możemy teraz przekształcić w prefabprefabprefab i umieścić w dowolnych miejscach na mapie.

RBKVX8qOg4F8Y
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Nauczysz się

W następnej – ostatniej już – części serii e‑materiałów dotyczących tworzenia gry w Unity Hub zajmiemy się poprawieniem kilku błędów, a na koniec wyeksportujemy projekt, aby móc przekazać go graczom.

Słownik

prefab
prefab

rodzaj zasobu, którego instancje można wykorzystywać wielokrotnie w projekcie; jeśli zajdą zmiany w prefabie, Unity automatycznie wprowadzi je we wszystkich jego instancjach

tag
tag

słowo referencyjne, które można przypisać do jednego lub większej liczby obiektów; tagi pomagają zidentyfikować obiekty do celów skryptowych