Triggery jako kolizje

Dziś dość przyjemny temat. Omówię na wstępie kilka rzeczy, które będą potrzebne aby dobrze zrozumieć mechanizm kolizji. Jest on wbudowany w Unity, wystarczy wywołać odpowiednią funkcję. Obsłużenie całego procesu zajmuje kilka minut.

Collider

Najpierw musimy dodać komponent kolizji do gracza i wroga z zakładki Physics 2D. Jako że chwilowo są reprezentowani przez kwadraty – Box Collider 2D wydaje się być odpowiednią opcją.

Bardzo ważna rzecz to zaznaczenie przy graczu checkboxa Is Trigger.

Kolizje działają na dwa sposoby – jeśli żaden z colliderów nie ma zaznaczonego tego checkboxa – wywoływana jest funkcja OnCollisionEnter2D. Jeśli jeden z obiektów go posiada – wywoływany jest OnTriggerEnter2D.

Akcje powinny być obsługiwane na triggerach, nadpisywanie logiki kolizji na collide. W tym rodzaju gry nie będziemy w ogóle potrzebować funkcji OnCollisionEnter2D, dlatego wystarczy że ustawimy na graczu checkboxa i jeden problem z głowy.

Layer

Unity w prosty sposób pozwala nam przypisać obiekty do planów.
Na początek utworzymy sobie trzy nowe:

Bardzo ważne jest zapamiętać jaki numer odpowiada jakiej warstwie.
Dlatego dodatkowo uzupełnimy nasz plik Constants.cs:

Na końcu przypisujemy odpowiednie obiekty do płaszczyzn:

Collision Matrix

Jeśli będziemy potrzebowali – możemy poustawiać co z czym może kolidować. Odnaczając tutaj odpowiednie checkboxy – gra nie wywoła eventu pomimo fizycznego kontaktu. Ustawienia te dostępne są pod: Edit / Project Settings / Physics 2D

Trigger

Przechodzimy do programowania. Potrzebne nam będą dwa nowe skrypty: PlayerCollide.cs i EnemyCollide.cs. Kolizji gracza na razie nie wypełnimy, natomiast napiszemy skrypt podpięty do wroga. Sprawdzimy tutaj czy zderzył on się z graczem, i jeśli tak – zniszczymy go. W przyszłości także odejmiemy punkty życia naszemu bohaterowi.

Jeśli ktoś chciałby zgłębić temat polecam artykuł:
COLLIDERS VS TRIGGERS – WHEN TO USE WHAT?

Niektóre rzeczy są bardzo proste i przyjemne do opanowania.
Gorzej z innymi, na przykład rozdzielczością…