Podczas nauki podstaw Unreal Engine należy zapoznać się z działaniem struktury rozgrywki Unreal. W tym dokumencie omówimy, jak skonfigurować tryb gry i klasy stanu gry dla Parrot.
Tryb gry
Tryb gry odpowiada za określenie podstawowych zasad rozgrywki, takich jak liczba graczy lub sposób dołączania graczy do gry. Stanowi również strukturę do tworzenia przydatnych klas gier, takich jak stan gry, kontroler gracza, interfejs HUD i domyślna klasa pionka.
Aby skonfigurować tryb gry dla Parrot, wykonaj następujące czynności:
W Content Browser (Przeglądarka zawartości) kliknij kolejno Content (Zawartość) > Blueprints (Blueprinty) > Game (Gra).
Kliknij prawym przyciskiem myszy w przeglądarce i wybierz Blueprint Class (Klasa Blueprintu).
Ustaw klasę nadrzędną na AGameModeBase.
Nadaj klasie nazwę „BP_ParrotGameMode”.
Kliknij dwukrotnie nowo utworzony blueprint, aby wyświetlić definiowane przez niego klasy podstawowe. W przypadku Parrot niektóre z tych klas należy zmienić:
Game State Class (Klasa stanu gry) powinna być ustawiona na BP_ParrotGameState
Player Controller Class (Klasa kontrolera gracza) powinna być ustawiona na BP_ParrotPlayerController
HUD Class (Klasa HUD) powinna być ustawiona na BP_ParrotHUD
Default Pawn Class (Domyślna klasa pionka) powinna być ustawiona na BP_ParrotPlayerCharacter
Przejdź do Edit (Edycja) > Project Settings (Ustawienia projektu) > Maps & Modes (Mapy i tryby) i ustaw Default GameMode (Domyślny tryb gry) na BP_ParrotGameMode.
Teraz, gdy tryb gry jest już skonfigurowany, możesz skonfigurować stan gry.
Stan gry
Stan gry obsługuje bieżące wydarzenia w grze. Zarządza informacjami, które klienty muszą znać, ale nie są one powiązane z żadnym konkretnym graczem. Można tu na przykład przechowywać wyniki drużyn.
Aby utworzyć stan gry dla Parrot, wykonaj następujące czynności:
W głównym edytorze wybierz Tools (Narzędzia) > New C++ Class… (Nowa klasa C++…)
Ustaw klasę nadrzędną na AGameStateBase.
Nadaj klasie nazwę „AParrotGameState”.
W Content Browser (Przeglądarka zawartości) kliknij + Add (+ Dodaj) > Blueprint Class (Klasa Blueprintu).
Ustaw klasę nadrzędną na AParrotGameState.
Nadaj klasie nazwę „BP_ParrotGameState”.
W blueprincie trybu gry przypisz BP_ParrotGameState do pola stanu gry.
Przegląd koncepcji trybu gry i stanu gry
Aby dowiedzieć się więcej na temat trybu gry i stanu gry, patrz Game Mode and Game State (Tryb gry i stan gry). W miarę tworzenia nowych klas w trakcie rozwoju gry pamiętaj o aktualizowaniu trybu gry i stanu gry.
Tryb gry można również ustawić dla poszczególnych map. Menu główne w grze Parrot wykorzystuje inny tryb gry niż ten używany na poszczególnych poziomach.
Instancja gry
Instancja gry to pojedyncza, trwała instancja klasy w silniku, która obsługuje funkcjonalności specyficzne dla projektu. Istnieje przez cały czas życia aplikacji. Zawiera klienta okna wizualizacji gry i lokalnego gracza.
Zgodnie z tym samym schematem, co tryb gry i stan, tworzymy klasę bazową C++, UParrotGameInstance, oraz klasę blueprintu, BP_ParrotGameInstance. Możesz ustawić klasę instancji gry dla swojego projektu, wybierając kolejno Edit (Edycja)->Project Settings (Ustawienia projektu)->Maps & Modes (Mapy i tryby).
Aby utworzyć instancję gry dla Parrot, wykonaj następujące czynności:
W głównym edytorze wybierz Tools (Narzędzia) > New C++ Class… (Nowa klasa C++…)
Ustaw klasę nadrzędną na UGameInstance.
Nadaj klasie nazwę „UParrotGameInstance”.
W Content Browser (Przeglądarka zawartości) kliknij + Add (+ Dodaj) > Blueprint Class (Klasa Blueprintu).
Ustaw klasę nadrzędną na UParrotGameInstance.
Nadaj klasie nazwę „BP_ParrotGameInstance”.
Przejdź do Edit (Edytuj) > Project Settings (Ustawienia projektu) > Maps & Modes (Mapy i tryby) i ustaw Game Instance Class (Klasa instancji gry) na BP_ParrotGameInstance.
Przykład streamingu poziomu
W grze Parrot różne mapy są przypisane do różnych trybów gry, a instancja gry informuje grę, która mapa powinna zostać załadowana, korzystając z plików UParrotMapDataAsset. Są to zasoby danych zawierające miękki wskaźnik obiektu do pliku mapy. Zasoby te są zorganizowane w instancji gry i można przełączać się między nimi w miarę postępów gracza w grze. Ponieważ znajdują się one w instancji gry, zawsze można streamować następny poziom z dowolnego miejsca. Kontroler gracza nasłuchuje zmian stanu gry, a następnie w razie potrzeby wywołuje instancję gry.
Poniższy zrzut ekranu przedstawia Blueprint wykorzystujący węzły Stream Level (Streamuj poziom) i Async Load Asset (Zasób ładowania asynchronicznego) do asynchronicznego wczytywania miękkiego odwołania do obiektu ParrotMapDataAsset. Następnie wywoływany jest węzeł Open Level (Otwórz poziom) bez konieczności oczekiwania na ładowanie synchroniczne, ponieważ poziom został już wczytany. Wykorzystywana jest tutaj również wtyczka CommonLoadingScreen. Widżet ekranu wczytywania zostanie wywołany podczas wstępnego wczytywania następnej mapy i usunięty po zakończeniu ładowania.
Więcej informacji na temat ekranu wczytywania oraz tego, dlaczego Parrot stosuje ładowanie asynchroniczne zamiast synchronicznego, można znaleźć w dokumentacji Interfejs użytkownika gry Parrot.