Silnik gry v2.0 – wrogowie

Kontynuujemy przerabianie silnika gry. Dzisiaj na celownik weźmiemy naszych przeciwników. Jako że mapy będą projektowane w całości ręcznie – wrogowie będą mieli z góry określone pozycje. Powinni oni być nieruchomi do momentu zderzenia z kamerą, później mają za zadanie aktywować się i zaatakować naszego herosa.

Awake vs Start

Środowisko Unity daje nam dostęp do dwóch wbudowanych funkcji: OnBecameVisible i OnBecameInvisible. Chciałem wyłączyć wroga, do momentu w którym nie zostanie zobaczony przez kamerę. Po paru godzinach doszedłem do jednego, bardzo ważnego wniosku: wspomniane funkcje nie działają, jeśli obiekt jest nieaktywny.

Drugim problemem był wybór pomiędzy Start i Awake. Większość tutoriali mówi o używaniu tych dwóch funkcji zamiennie. Boleśnie się przekonałem o tym, że różnica jest dosyć spora. Kiedy więc używać której fukncji? Krótko mowiąc: Start do inicjalizacji jednorazowej (OnEnabled jeśli wiele razy), Awake do operacji odbywających się pomiędzy skryptami.

Movement 2.0

Zgodnie z nowym modelem ruchu przeciwników – powinni oni stać w miejscu, dopóki nie będą widoczni w kamerze, a po zniknięciu powinni zostać zniszczeni. Tę drugą czynność możemy osiągnąć w bardzo prosty sposób.

Ruch wroga powinien odbywać się przy użyciu flagi od komponentu Renderer’a. Każdy rodzaj antagonisty posiadał będzie własny skrypt określający jego sposób poruszania po mapie.

Kamikaze

Pierwszym z kilku typów wrogów będzie kamikaze. Tak jak japońscy wojskowi piloci – będą wlatywać we wroga, z misją zadania jak największych obrażeń.

Obiekty w grach 2D rozmieszczone są według dwóch osi: pionowej i poziomej. W pierwszej z nich przeciwnik powinien lecieć w dół. W osi X natomiast – do momentu gdy nie osiągnie odpowiedniej pozycji – przesuwać się w kierunku statku gracza. Co najważniejsze – ruch nie odbywa się dopóki renderer obiektu nie jest widzialny w kamerze.

Następnym etapem będzie prawdopodobnie zmiana obszaru gry na proporcje ze starszych monitorów 4:3. Na pionowego shootera 16:9 jest zdecydowanie zbyt szerokie.