W grach istnieje wiele różnych sposobów pracy z kamerą, które mogą się znacznie różnić w zależności od rodzaju tworzonej gry. W Unreal Engine kamery zazwyczaj składają się z aktora z komponentem wysięgnika sprężynowego oraz komponentu kamery, który renderuje widok. Podstawowe informacje na temat konfiguracji kamery można znaleźć w dokumencie Using Cameras in Unreal Engine (Korzystanie z kamer w Unreal Engine).
W poniższym artykule deweloperzy opisują, w jaki sposób zdecydowali się zaimplementować kamerę w grze Parrot, oraz przedstawiają wszystkie ustawienia, na które warto zwrócić uwagę.
Podsystem kamery w Parrot
Na początek zidentyfikowano wszystkie mapy, które mogą mieć ustawienia kamery specyficzne dla świata.
Deweloperzy stworzyli UParrotCameraSubsystem, który współdzieli czas życia świata i inicjuje kamerę z tymi ustawieniami w BeginPlay. Ustawienia specyficzne dla mapy są przechowywane w AParrotWorldSettings, co jest przydatne do przechowywania wszelkich danych dotyczących mapy. W przypadku kamery są to żądana klasa kamery, tryb ruchu oraz górna/dolna granica osi Z, powyżej której kamera nie ma już śledzić gracza. Sama klasa jest opcjonalna i jej brak jest dopuszczalny. Odbywa się to w menu głównym.
Aby zapoznać się z uzasadnieniem wyboru podsystemu, zapoznaj się z dokumentacją Podsystemy w Parrot.
Ustawienia świata można znaleźć w panelu World Settings (Ustawienia świata) w edytorze.
Kamera w Parrot
AParrotCamera to miejsce, w którym odbywa się większość operacji logicznych. Kiedy kamera jest inicjowana przez podsystem, otrzymuje: gracza, którego ma śledzić, tryb ruchu oraz granice z ustawień świata.
Kamera ma trzy możliwe tryby ruchu: None (Brak), Fixed (Stały) i Follow (Śledź).
Brak działa dokładnie tak, jak sugeruje nazwa. Kamera nie wykonuje żadnych czynności.
Stały tryb ruchu jest prosty. Kiedy gracz wejdzie w pole ograniczonego woluminu, podsystem kamery nadaje kamerze stałą lokalizację, do której zostanie ona interpolowana. Gracz może wtedy swobodnie się poruszać, dopóki tryb ruchu nie zostanie zaktualizowany.
Tryb ruchu Śledź jest bardziej złożony i najlepiej zrozumieć go, patrząc na Content/Blueprints/BP_PlatformerCamera, gdzie znajduje się wizualna referencja. AParrotCamera ma domyślnie podobiekty w postaci pola wyzwalającego ruch i siatki blokującej. Oznacza to, że każda instancja AParrotCamera ma je automatycznie dodane do swojej hierarchii. Oba są wyrównane z polem widzenia kamery, wysięgnikiem sprężynowym i perspektywą, aby uzyskać pożądany efekt. Oba te komponenty są przymocowane do aktora kamery i podążają za nim w świecie.
Siatka blokująca uniemożliwia graczowi cofanie się poprzez kolizję z graczem w świecie.
Gdy gracz nakłada się na pole wyzwalające ruch, kamera próbuje interpolować wartość X gracza z ustaloną szybkością. Prędkość jest również mnożona przez odległość gracza od lewej krawędzi woluminu wyzwalania. W ten sposób im dalej gracz znajduje się w woluminie, tym szybciej kamera powinna się poruszać, aby go dogonić.
W rezultacie gracz może swobodnie poruszać się po lewej stronie ekranu aż do siatki blokującej, ale kamera porusza się wraz z graczem, gdy przekroczy on próg. Zapewnia to ładny efekt, gdy gracz porusza się po świecie wzdłuż osi X.
Kolejną ważną cechą trybu śledzenia ruchu jest śledzenie ostatniej znanej lokalizacji gracza. Jeśli współrzędna Z gracza przekroczy granice świata lub postać gracza zostanie zniszczona, kamera zostanie przesunięta do ostatniej znanej lokalizacji gracza. Zapobiega to szarpnięciom kamery spowodowanym ruchem lub stanem gracza.
Na koniec, sam Camera Component (komponent kamery) w BP_PlatformerCamera ma kilka ustawień, na które warto zwrócić uwagę. Projection Mode (Tryb projekcji) to perspektywa z polem widzenia 90 stopni i proporcjami obrazu 1.77, co jest standardem dla rozdzielczości HD. W sekcji Camera Settings (Opcje kamery) ograniczamy proporcje obrazu, aby kamera zawsze wyglądała prawidłowo, niezależnie od rozdzielczości aplikacji.