Save i Load w Blueprints

Aby zapisać grę, musimy zdefiniować wszystkie informacje, które są niezbędne do przechowywania, aby móc później załadować grę. Informacje te muszą być gromadzone i przechowywane w zmiennych Blueprint typu „SaveGame”. Poniższy zrzut przedstawia funkcje używane do zapisywania i ładowania gry.

Jako przykład wykorzystania tych funkcji dodamy do gry, którą stworzyliśmy w pierwszej części tego bloga, opcje szybkiego zapisu i szybkiego ładowania . Opis gry znajduje się w artykule: „ Bardzo prosta gra w Blueprints ”.

Ale nie martw się, jeśli nie ukończyłeś gry z pierwszej części, ponieważ koncepcje przedstawione w tym artykule można łatwo dostosować do swojej gry.

Pierwszym krokiem jest stworzenie nowego schematu typu SaveGame . Aby to zrobić, wyszukaj „Zapisz” w opcji „Wszystkie klasy” i wybierz jako klasę nadrzędną klasę „Zapisz grę”, jak pokazano na tym obrazku:

Na przykład wybrałem nazwę „ SaveInfo ” dla tego nowego schematu, który będzie zawierał wszystkie informacje, które zostaną zapisane.

Zapiszemy zmienne, które definiują aktualny stan gry. Zmienne to Level, Score, StatueCont i Time. Są to zmienne typu Integer i opisane w artykule: „ GameHUD: Inicjalizacja zmiennych za pomocą makra ”.

Oprócz tych zmiennych, zapiszemy również transformacje gracza i wszystkie „statuetki” w grze. Zmienna typu Transformacja zawiera informacje o lokalizacji, rotacji i skali aktora. Tak więc podczas ładowania gry możemy ustawić Gracza i „Statues” w pozycji, w jakiej się znajdowały w momencie zapisywania gry.

Zmienne planu „ SaveInfo ” to:

Wszystkie zmienne zostały oznaczone jako „ Edytowalne ” (reprezentowane przez ikonę z otwartym okiem), aby ułatwić dostęp do tych zmiennych w innych Schematach.

Schemat „ SaveInfo ” służy wyłącznie do przechowywania informacji. Nic nie jest tworzone w jego  EventGraph .
W tym przykładzie Blueprint „ GameHud ” będzie odpowiedzialny za  opcje Quick Save i Quick Load . Dodamy zmienną typu SaveInfo do „GameHud”, aby wypełnić informacje, które zostaną zapisane. Nazwa zmiennej to „ SaveInfoVar ”. 

W Blueprint „GameHud” dodamy zdarzenie klawisza F9 dla szybkiego zapisu i zdarzenie klawisza F10 dla szybkiego ładowania . Aby zdarzenia wejściowe działały w  Blueprint  „GameHud”, musisz użyć funkcji Enable Input, jak pokazano na obrazku:

Aby uporządkować Blueprint, stworzyłem makra SaveGameVars, SaveTransforms, LoadGameVars i LoadTransforms . Służą do przenoszenia informacji między Blueprint SaveInfo a Schematami gry. Zawartość tych makr zostanie pokazana później.

To jest implementacja szybkiego zapisywania :

Spójrzmy na każdą z użytych funkcji i makr  :

  • Utwórz obiekt zapisu gry : Tworzy obiekt klasy wybranej w parametrze „Zapisz klasę gry”. W naszym przykładzie użytą klasą jest „SaveInfo”. 
  • Cast To SaveInfo : Konwertuje utworzony obiekt na klasę SaveInfo.
  • Set SaveInfoVar : Przechowuje obiekt utworzony w zmiennej SaveInfoVar.
  • Makro SaveGameVars : kopiuje wartości zmiennych Level, Score, StatueCont i Time z GameHud do obiektu SaveInfoVar.
  • Macro SaveTransforms : kopiuje wartości transformacji odtwarzacza i statuetek do obiektu SaveInfoVar. 
  • Zapisz grę na slocie: zapisuje obiekt SaveInfoVar, używając jako SlotName = “BP_Game” i UserIndex = 0.

Po wykonaniu Szybkiego Zapisu Schemat utworzy plik używając Nazwy Slotu i rozszerzenia „.SAV”. W tym przykładzie plik BP_Game.SAV został utworzony w folderze „ ProjectName-> Saved-> SaveGames ”. Ten plik zawiera dane wszystkich zmiennych, które utworzyliśmy w Blueprint SaveInfo . UserIndex parametr pozwala wielu obiektów Savegame są zapisywane w tym samym pliku. Aby to zrobić, zmień wartość UserIndex.

Poniżej przedstawiamy implementację  Quick Load : 

Na zakończenie artykułu przeanalizujemy zawartość każdego z utworzonych makr.

  • Macro SaveGameVars :

W tym makrze po prostu przechowujemy wartości zmiennych GameHud w zmiennych obiektu SaveInfoVar.

  • Makro SaveTransforms :

Transformację odtwarzacza uzyskuje się za pomocą funkcji GetPlayerCharacter i GetActorTransform . Aby zapisać transformacje “Statues”, używamy  Arrays z ForEachLoop .

 
Używamy funkcji „Get All Actor of Class”, aby uzyskać tablicę zawierającą wszystkie „Statues” w grze. Korzystanie z pętla foreach otrzymujemy przekształcenia każdego „Rzeźba” i dodać go do StatuesTransforms Array obiektu SaveGameInfo.

  • Macro LoadGameVars :

To makro zostało oparte na  Macro StartGame . Ale zamiast używać wartości domyślnych do uruchamiania zmiennych, używane są załadowane wartości zmiennej SaveInfoVar.

  • Makro LoadTransforms :

Wykonuje odwrotny proces makra SaveTransforms, kopiując wartości Transformations z obiektu SaveInfoVar do Player i Statues.


Źródło:https://romeroblueprints.blogspot.com/2015/01/save-and-load-in-blueprints.html