Zajecia nr 5 – Kolizje i Mikroprojekt


Na tych zajeciach omowimy sobie po krotce czym sa kolizje i fizyka a przez reszte zajec bedziecie samodzielnie pracowac nad dokonczeniem Endless Runnera.

Fizyka w Unity

Aby stworzyc obiekt fizyczny w Unity. nalezy do GameObjectu dodac dwa komponenty: Rigidbody i Collider (np. Box Collider)

Przyklad obiektu ktory ma wlaczona fizyke.

Tego typu obiekt bedzie otrzymywac wywolania OnCollisionEnter i OnTriggerEnter z obiektow ktore rowniez posiadaja komponent Collidera.

Wazne: Fizyka 2D i 3D nie jest wzajemnie kompatybilna – obiekt Rigidbody nie otrzyma informacji o kolizji z obiektu z Colliderem typu BoxCollider 2D i vice versa.

Roznica pomiedzy Colliderem a Colliderem ktory jest triggerem jest taka, ze dwa Collidery z odznaczonym IsTrigger beda nawzajem wplywac na swoje fizyczne reakcje (zderza sie ze soba, odbija sie od siebie, etc.) a obiekt, ktory posiada IsTrigger bedzie w stanie nas tylko i wylacznie poinformowac ze przeniknal przez jakis inny obiekt w funkcji, nie bedzie zadnej fizycznej reakcji.

Przyklad obiektu ktory jest triggerem.

Aby wykryc kolizje w Bolcie nalezy uzyc nastepujacych bloczkow.

Przyklad wykrycia kolizji z obiektem z tagiem Obstacle i zniszczenia tego obiektu przy tej kolizji.

Powyzszy przyklad wykorzystuje blok On Trigger Enter ktory wykrywa zderzenie obiektu posiadajacego Rigidbody z obiektem posiadajacym Colldider z ustawionym IsTrigger = true. Aby wykryc kolizje z obiektem ktory ma IsTrigger = false, nalezy uzyc bloczku On Collision Enter.

Do dyspozycji sa takze bloczki On Trigger Stay – wykonywany tak dlugo jak dlugo trwa kolizja oraz On Trigger Exit – wykonywany w momencie kiedy kolizja zostala zakonczona. Adekwatne On Collision Stay i On Collision Exit rowniez istnieja.

WAZNE – Istnieja takze alternatywy 2D tych bloczkow, np. On Trigger Enter 2D. NIE sa one kompatybilne z fizyka 3D tak samo jak powyzsze bloczki nie sa kompatybilne z fizyka 2D.

W powyzszym przykladzie mozemy takze zauwazyc wykorzystanie bloczku Compare Tag. Moze on sluzyc nam do sprawdzenia z obiektem jakiego typu wlasnie sie zderzylismy. Tag ten musi byc wczesniej zdefiniowany i ustawiony na obiekcie aby mozna bylo go uzyc.

Aby zdefiniowac tag nalezy wybrac obiekt do ktorego chcemy ten tag ustawic np. prefab Obstacle (ale rownie dobrze moze to byc obiekt na scenie). Nastepnie kliknac w rozwijana liste Tag oraz z niej wybrac Add Tag… (jesli tag ktory chcemy ustawic jeszcze nie istnieje). Mozemy go dodac w oknie ktore zostanie otworzone poprzez klikniecie + w liscie tagow.

Obstacle z ustawionym tagiem Obstacle
Dodawanie nowego tagu
Lista zdefiniowanych tagow.

Ostatnia rzecza, ktora jest zademonstrowana na przykladzie w bloczkach jest niszczenie obiektu za pomoca bloczka Destroy Game Object. Przyjmuje on Game Object jako input, ktory jest pobierany za pomoca bloczka Get Game Object. Jest to wazny krok, jako, ze pole Collider jest komponentem ktory nalezy do Game Objectu wiec podanie bezposrednio pola Collider do bloczka Destroy nie zniszczy calego obiektu a tylko ten komponent.

Wczytywanie sceny

Scene w Unity mozna wczytac za pomoca bloczka Load Scene.

Przyklad wczytania sceny po wcisnieciu spacji.

Wczytanie sceny w powyzszy sposob sprawi, ze obecnie otwarta scena zostanie odczytana z pamieci i zamiast niej zostanie wczytana podana przez nas scena.

Aby scena zostala wczytana musi byc ona wczesniej dodana do Build Settings w Unity. Mozemy je znalezc pod File/Build Settings

Przyklad okna Build Settings z dodana scena gry.

Aby dodac scene do Build Settings mozemy uzyc przycisku Add Open Scenes, ktory doda wszystkie obecnie otwarte sceny, lub mozemy tez przeciagnac i upuscic na pole z lista scene bezposrednio z folderu w oknie Project.

Po dodaniu potrzebnych scen mozemy takze z tego okna wcisnac przycisk Build i stworzyc wykonywalna wersje gry (taka, ktora nie wymaga Unity aby w nia grac).

Mikroprojekt Endless Runner

1. Dodajcie ściany ograniczające poruszanie się gracza.
2. Zmodyfikujcie wizualnie scenę gry.
3. Dodajcie wyświetlanie liczby żyć i punktów gracza.
4. Dodajcie powiększanie się liczby punktów gracza o 1 jeśli zbierzemy nagrodę (zniszczcie obiekt nagrody po zebraniu).
5. Dodajcie zmniejszanie się liczby zyc o 1 jeśli uderzymy w przeszkodę. (zniszczcie obiekt przeszkody po zebraniu).
6. Dodajcie wyświetlenie planszy Game Over jeśli liczba żyć spadnie do zera 7. Dodajcie reset gry po wciśnięciu Spacji