Starten met programmeren van een 3d omgeving in Unreal Engine – SaveGame

print
Deze handleiding maakt deel uit van het programmeertraject:


Inhoud


Wat vooraf ging


Inleiding

  • U kunt eventueel verder werken op de handleiding over Variabelen of u start een nieuw Third Person Desktop/Console project en geef het een passende naam.

In de handleiding over Variabelen hebben we onderstaande variabelen toegevoegd:

  • IsLevend – deze eigenschap houdt bij of ons karakter nog steeds in leven is of niet.
  • Naam – de naam die we ons karakter wensen te geven.
  • Gezondheid – een waarde tussen 0 en 100 die aanduidt hoe gezond ons karakter nog is.
  • MaxGezondheid – de maximale gezondheid voor mijn karakter (Default Value = 100)

We wensen nu echter dat de Naam en de Gezondheid kunnen gewijzigd worden en dat deze wijzigingen moeten bewaard worden.

  • Voeg de 4 variabelen , indien nodig, toe aan het ThirdPersonCharacter.

Voeg onderstaande code toe aan de Event Graph:

  • Bij het opstarten (Event BeginPlay) wordt de waarde van de variabele MaxGezondheid toegekend aan de variabele Gezondheid.
  • Bij het drukken op de N-toets (Event N) wordt uw naam toegekend aan de variabele Naam.
  • Bij het drukken de F-toets (Event F) wordt de waarde van de variabele Gezondheid met 10 verminderd.
  • Maak een Custom Event Printen die het afdrukken op het scherm verzorgt (voeg de gewenste spaties toe) en voeg deze Custom Event overal toe als een vorm van debuggen.

  • Compile, Save en Play en test dit uit.
  • Herstart.

Merk op dat bij het opstarten de Naam leeg is en de Gezondheid 100. Dit is telkens het geval als u opstart, er wordt dus niets bewaard.

We gaan nu bekijken hoe we deze gegevens kunnen bewaren.


SaveGame object

We starten met het aanmaken van een SaveGame object. Dit is een Blueprint van het type SaveGame.

  • Ga naar de map die uw Blueprints bevat (bv. ThirdPersonBPBlueprints).
  • Klik rechts in de Content Browser en kies Blueprint Class.
  • Zoek naar SaveGame object.

  • Klik op Select en geef een passende naam (bv. mySaveGame).
  • Dubbelklik om de Blueprint om te openen.

Een SaveGame Blueprint bevat geen code maar is als een container die de variabelen bevat die moeten bewaard worden.

  • Maak een variabele saveNaam (sting) en saveGezondheid (Integer) aan.
  • Compile en Save.
  • Geef de variabele saveNaam de voorlopige waarde Test.


Laden

Nu we een SaveGame object hebben gaan we dit gebruiken om de gegevens in te laden en te bewaren.

  • Ga naar de Event Graph van de ThirdPersonCharacter Blueprint.

Eerst gaan we ze laden, dit kan het best bij het opstarten (Event BeginPlay). We gaan de huidige Event BeginPlay herwerken.

  • Verwijder de huidige nodes bij Event BeginPlay.

We gaan eerst checken of er een SaveGame object bestaat via de functionaliteit Does Save Game Exist.

  • Maak onderstaande code aan:

Merk op dat we een Slot Name hebben moeten meegeven, dit is als een bestandsnaam die we gaan hergebruiken. U kunt hiervoor het best een eigen variabele aanmaken. Ik heb dit echter hier nagelaten omdat ik me enkel wil focussen op de essentie.

User Index is van belang in een multiplayer omgeving. Aangezien we de enige gebruiker zijn laten we dit op 0 staan.

Het resultaat is een Boolean (waar of niet waar) dat we nadien gebruiken in een Branch.

Indien er geen SaveGame object bestaat

Indien er geen SaveGame object bestaat, maken we er één aan via de functionaliteit Create Save Game Object, u geeft de klasse van het SaveGame object mee (in mijn voorbeeld mySaveGame).

Zoals u weet hebben we, in het SaveGame object, de standaardwaarde 0 gebruikt voor de variabele SaveGezondheid en de standaardnaam “Leeg” voor de variabele SaveNaam. We gaan de standaardnaam inladen en toekennen aan de variabele Naam, maar behouden van de waarde van de variabele MaxGezondheid als toekenning voor de variabele Gezondheid (zodat we starten met een gezondheid van 100 en niet met een gezondheid van 0). We drukken opnieuw de gegevens af op het scherm om te controleren.

  • Pas de code als volgt aan:

Merk op, er is nog steeds niets bewaard, dus start u opnieuw op, dan bestaat het SaveGame object nog steeds niet.

Indien er wel een SaveGame object bestaat

Indien er wel een SaveGame object bestaat gaan we het inladen via de functonaliteit Load Game From Slot.

  • Pas de code als volgt aan:

U geeft de Slot Name (Slot1) mee, de User Index blijft 0.

Vervolgens moeten we Casten naar het door ons gebruikte SaveGame object.

Als dit SaveGame object hebben we vervolgens toegang tot de waarden van de variabele SaveNaam en SaveGezondheid die we gebruiken om toe te kennen aan de variabelen Naam en Gezondheid (we gebruiken dus niet langer de waarde van MaxGezondheid maar de opgeslagen waarde van SaveGezondheid).


Bewaren

Het bewaren gaan we bv. uitvoeren via de S-toets (Event S).

  • Voeg een Event S toe aan de ThirdPersonCharacter Blueprint.
  • Pas de code als volgt aan:

We creëren eerst het SaveGame object via de functionaliteit Create Save Game Object. Geef de gewenste klasse mee.

We promoten het opgevraagde SaveGame object tot een variabele om gemakkelijker te kunnen hergebruiken.

Vervolgens kennen we aan de verschillende variabelen uit het SaveGame object (SaveNaam en SaveGezondheid) de overeenkomende waarden van de variabelen toe.

Het eigenlijke bewaren gebeurt via de functionaliteit Save Game To slot. U geeft onze referentie naar ons SaveGame object mee, u geeft de gewenste Slot Name (Slot1) mee (nogmaals, u kunt hiervoor een variabele gebruiken), de User Index is nog steeds 0.

We drukken de gegevens uit om te debuggen.

  • Compile, Save en Play.

U kunt nu de gegevens bewaren en opnieuw opvragen.


Masterclass – Saving and loading

Onderstaande Masterclass toont hoe u een array, een lijst met topscores, kunt bewaren alsook de toestand (open of gesloten) van een deur.

Geef een reactie

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

  • Abonneer je op deze website d.m.v. e-mail

    Voer je e-mailadres in om je in te schrijven op deze website en e-mailmeldingen te ontvangen van nieuwe berichten.