Start to Program – Blueprints Visual Scripting – Basisbegrippen – Variabelen

print
Deze handleiding maakt deel uit van het programmeertraject:


Inhoud


Wat vooraf ging


Inleiding

U hebt reeds kennisgemaakt met programmeren via Blueprints Visual Scripting. We gaan nu dieper ingaan op een aantal basisbegrippen van het programmeren.

  • Start een nieuw Third Person Desktop/Console project van Maximum Quality With Starters Content en geef het een passende naam.


Variabelen

Algemeen

In een voorgaande post heb ik onderstaande “definitie” gebruikt voor het begrip variabele.

Een variabele is een voorbehouden locatie in het computergeheugen waar u een waarde kunt bijhouden/stokkeren voor later hergebruik. De variabele heeft een naam en is vaak van een specifiek type. Het type bepaalt het aantal bytes dat gereserveerd wordt in het computergeheugen voor deze variabele en de naam van de variabele wordt gebruikt om toegang te krijgen tot deze locatie in het computergeheugen. De waarde die wordt bijhouden in die locatie, en waar de variabele naar verwijst, kan in de loop van het programma variëren/wijzigen.

Laten we dit nu even meer in detail bekijken en wat uitbreiden en duiden specifiek voor Blueprint Visual Scripting:

  • Een variabele is een voorbehouden locatie in het computergeheugen waar u een waarde kunt bijhouden/stokkeren voor later hergebruik.
  • Zoals u wellicht weet is het computergeheugen vluchtig. Dit wil zeggen dat het wordt leeggemaakt als u uw computer uitschakelt. Dit betekent dat de variabelen, die zich in het computergeheugen, en niet op een schijf, bevinden, eveneens hun gewijzigde waarde zullen verliezen. De wijzigingen zijn dus niet blijvend.
  • De variabele heeft een naam (identifier). De naam van de variabele wordt gebruikt om toegang te krijgen tot deze locatie in het computergeheugen.
  • De variabele is van een specifiek datatype. Het datatype bepaalt het aantal bytes dat gereserveerd wordt in het computergeheugen voor deze variabele en bepaalt ook welk soort/type data de variabele kan bevatten (integer, float, string, vector, actor, …).
  • De waarden die opgeslagen worden in variabelen kunnen in de loop van het programma variëren, ze zijn dus variabel.
  • Een variabele moet binnen dezelfde blueprint uniek zijn. Dezelfde naam mag dus binnen dezelfde blueprint geen tweede keer hergebruikt worden voor een tweede variabele.
  • Een variabele wordt een waarde toegekend, we spreken dan van een SET.
  • De waarde van een variabele kan worden opgevraagd, we spreken dan van een GET.

Een variabele aanmaken

Stel, we voegen aan ons karakter 4 eigenschappen toe. We gaan hiervoor gebruik maken van een variabele (weet dat wanneer u wenst dat deze eigenschappen blijvend zijn ze zullen moeten bewaard worden, maar dit zijn zorgen voor later). De gewenste eigenschappen zijn:

  • 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.

Deze eigenschappen willen we toevoegen aan ons karakter, we gaan deze dus moeten toevoegen aan de Blueprint Class van ons karakter. Omdat ons karakter reeds toegevoegd is aan het level vindt u deze in de World Outliner als ThirdPersonCharacter.

  • Klik op Edit ThirdPersonCharacter in de World Outliner.

Er zijn 2 manieren om een variabele toe te voegen aan deze Blueprint Class.

In het tabblad My Blueprint, klik op Add NewVariable.

In het tabblad My Blueprint, klik op ket +-teken achter Variables.

  • Gebruik nu één van bovenstaande methode om een variabele toe te voegen.
  • Deze nieuwe variabele komt met de standaardnaam NewVar_0 (of een ander volgnummer).

  • Wijzig deze naam in IsLevend en druk op Enter (of klik buiten het invulvak).

  • Herhaal dit proces nu voor de andere 3 variabelen die moeten worden aangemaakt.

We hebben nu de nodige eigenschappen (als variabelen) toegevoegd.

Indien u eventueel nog wijzigingen wenst aan te brengen (zoals de naam veranderen, kopiëren of verwijderen), klik dan met de rechtermuisknop ingedrukt op de variabele die u wenst te wijzigen en kies de gewenste actie.

Zoals onderstaande video toont kunt u ook variabelen aanmaken door een invoer- of uitvoerpin te Promote to variable


Datatypen

Een variabele moet van een bepaald datatype zijn. Voor onze eigenschappen (variabelen) geldt dat:

  • IsLevend – bevat een waarde Waar of Onwaar.
  • Naam – bevat een niet opgemaakte tekst.
  • Gezondheid – een geheel getal (we zouden ook een decimaal getal kunnen kiezen).
  • MaxGezondheid – een geheel getal (we zouden ook een decimaal getal kunnen kiezen).

Hieronder ziet u de meest gebruikte datatype maar er zijn er nog en eigenlijk kan iedere klasse dienst doen als een datatype via een referentie naar die klasse.

Boolean Een Boolean-variabelen kan maar één van twee mogelijke waarden bevatten: Waar of nietwaar, ja of neen, aan of uit, 0 of 1, ….
Integer Een Integer-variabele kan een geheel getal bevatten.
Float Een Float-variabele kan een decimaal getal bevatten.
String Een String-variabele kan een tekst bevatten.
Text Een Tekst-variabele kan een opgemaakte tekst bevatten.
Vector Een Vector-variabele kan een vector bevatten of eigenlijk drie Float-getallen en kan bijgevolg dus ook gebruikt worden om bv. een kleur bij te houden (RGB).
Rotator Een Rotator-variabele bevat de waarden van een rotatie.
Transform Een Transform-variabele kan transformatiewaarden (positie, rotatie en schaal) bevatten.
Object Een Object-variabele kan een verwijzing naar een object/actor bevatten.

Vertaald naar onze eigenschappen (variabelen) wordt dit:

  • IsLevend – bevat een waarde Waar of Onwaar = Boolean.
  • Naam – bevat een niet opgemaakte tekst = String.
  • Gezondheid – een geheel getal (we zouden ook een decimaal getal kunnen kiezen en als we delingen wensen uit te voeren zouden we dit beter doen) = Integer.
  • MaxGezondheid – een geheel getal (we zouden ook een decimaal getal kunnen kiezen en als we delingen wensen uit te voeren zouden we dit beter doen) = Integer.

Merk op hoe Unreal Engine kleuren gebruikt om de datatypen visueel te duiden.

Als u nu kijkt naar de door ons aangemaakte variabelen dan hebben die allemaal een rode kleur. Ze zijn dus allemaal van het datatype Boolean.

Dit Boolean-type is oké voor de variabele IsLevend, maar niet voor de andere variabelen, deze gaan we moeten wijzigen.

De variabele Naam moet van het type String zijn.

  • Selecteer de variabele Naam.
  • In het Details-panel selecteert u String uit de keuzelijst Variable Type.


De variabele Gezondheid moet van het type Integer zijn.

  • Selecteer de variabele Gezondheid.
  • In het Details-panel selecteert u Integer uit de keuzelijst Variable Type.

De variabele MaxGezondheid moet van het type Integer zijn.

  • Selecteer de variabele MaxGezondheid.
  • In het Details-panel selecteert u Integer uit de keuzelijst Variable Type.

Aan de kleuren herkent u de toegekende datatypen.


Waarden toekennen en opvragen (SET en GET)

Standaardwaarden

We wensen de volgende waarden aan onze variabelen toe te kennen:

  • IsLevend – waar.
  • Naam – uw eigen naam.
  • Gezondheid – bij het opstarten moet Gezondheid dezelfde waarde krijgen als MaxGezondheid.
  • MaxGezondheid – 100.

De variabelen IsLevend, Naam en MaxGezondheid kunnen allen een standaardwaard (Default Value) krijgen.

  • Selecteer de variabele IsLevend.
  • In het Details-panel zet u een vinkje (aangevinkt staat voor Waar) bij Default Value.

  • Selecteer de variabele Naam.
  • In het Details-panel typt u uw naam in bij Default Value.

  • Selecteer de variabele MaxGezondheid.
  • In het Details-panel geeft u de waarde 100 in bij Default Value.

SET

De variabele Gezondheid moet de waarde krijgen van de variabele MaxGezondheid.

Dit kan het best gebeuren bij het starten van het programma, dus bij het uitvoeten van de event BeginPlay.

Hoe gaan we te werk.

  • Ga naar de Event Graph van de ThirdPersonCharacter Blueprint (wellicht staat u hier al).

U ziet reeds verschillende events geprogrammeerd staan.

  • Versleep, met de rechtermuisknop ingedrukt, de inhoud van de Event Graph zodat u in een lege ruimte van de Event Graph komt (en niet meer gestoord wordt door de bestaande events).
  • Sleep, gewoon met de linkermuisknop ingedrukt, nu de variabele Gezondheid naar de Event Graph.

U krijgt de keuze uit Get Gezondheid of Set Gezondheid.

  • U kunt ook de variabele slepen met de Ctrl-toets ingedrukt om meteen een Get te krijgen.
  • U kunt ook de variabele slepen met de Alt-toets ingedrukt om meteen een Set te krijgen.

Het verschil is:

  • Get Gezondheid zal een waarde opvragen.
  • Set Gezondheid zal een waarde toekennen.

We wensen een waarde aan de variabele Gezondheid toe te kennen dus kiest u voor Set.

  • Selecteer Set Gezondheid. U ziet de SET Gezondheid node.

GET

De waarde die momenteel aan de variabele Gezondheid zou worden toegekend is 0.

Ik zou hier simpelweg 100 kunnen intypen, de standaardwaarde van de variabele MaxGezondheid, maar dit zou geen goede manier van werken zijn. Immers moesten we de standaardwaarde van de variabele MaxGezondheid wijzigen dan zouden we er ook moeten aan denken deze hier te wijzigen en misschien zou u dit wel eens kunnen vergeten.

Wat gaan we dan wel doen? Wel, we gaan de waarde van de variabele MaxGezondheid opvragen (Get).

  • Sleep de variabele MaxGezondheid naar de Event Graph.

U krijgt weer de keuze uit Set MaxGezondheid en Get MaxGezondheid.

  • U wenst de waarde op te vragen dus kiest u voor Get MaxGezondheid. Onderstaande GET MaxGezondheid node wordt toegevoegd.

Merk de verschillen op tussen de SET en GET nodes.

GET De GET-node heeft geen invoerpin, enkel een uitvoerpin.
SET De SET-node heeft een invoerpin en ook een uitvoerpin, net als Exec-pinnen waardoor de SET-node deel kan uitmaken van de instructies. De SET-node is dan ook een instructie.
  • Om nu de waarde van de variabele MaxGezondheid toe te kennen aan de variabele Gezondheid moet u de uitvoerpin van GET MaxGezondheid verbinden met de invoerpin van SET Gezondheid. Of anders gezegd, de variabele Gezondheid krijgt, als invoer, de waarde van MaxGezondheid.

Merk ook de kleuren op van de nodes, dit is dezelfde cyaan kleur van de variabele (geen toeval).

Om deze code effectief uit te voeren moeten we nog bepalen wanneer deze code moet worden uitgevoerd, bij welke event.

We wensen dat deze code wordt uitgevoerd bij het starten van het spel, dus bij de event BeginPlay.

  • Sleep een verbindingslijn vanuit de inkomende (linkse) Exec-pin van de SET Gezondheid node.

  • Zoek naar Event BeginPlay en klik deze aan.

De verbinding is gemaakt en als u begint te spelen zal de variabele Gezondheid de waarde krijgen van de variabele MaxGezondheid.

Conversies

Om dit te controleren gaan we de waarde van de variabele Gezondheid “uitprinten” op het scherm.

  • Trek een verbindingslijn vanuit de rechtse Exec-pin van de SET Gezondheid node en zoek naar Print String (eens gevonden klikt u het aan).

  • Verbind nu de uitvoerpin van de SET Gezondheid node met de invoerpin In String van de node Print String.

Merk op dat er een conversienode is toegevoegd. In String is immers van het type String (en verwacht dus een String als invoer) terwijl de variabele Gezondheid van het type Integer is. Deze Integer wordt dus eerst geconverteerd naar het type String voor deze wordt toegekend aan In String. Unreal Engine verzorgt deze conversies automatisch.

Let op, niet iedere conversie zal lukken. Stel dat u een String die uw naam bevat wilt toekennen aan een Integer dan zal dit niet lukken. Unreal Engine zal dit opvangen door een 0 toe te wijzen.

Tijd om te compileren en te bewaren.

  • Klik op de knoppen Compile en Save.
  • Start vervolgens het programma. Als alles goed verlopen is ziet u gedurende 2 seconden in de linkerbovenhoek van uw scherm het getal 100. De waarde van de variabele Gezondheid.


Constanten

Het verschil tussen een variabele en een constante is dat de waarde van een variabele in de loop van het programma mag en kan variëren. Bij een constante kan en mag de initiële waarde niet veranderen. Een constante is dus eigenlijk Read Only. Een praktisch voorbeeld is het getal Pi (u weet wel het getal 3.14159 dat gebruikt wordt voor o.a. berekeningen van cirkels).

In ons voorbeeld kunnen we de variabele MaxGezondheid constant maken.

In Unreal Engine Blueprints doet u dit door de eigenschap Blueprint Read Only aan te vinken.

  • Selecteer de variabele MaxGezondheid.
  • In het Detail-panel, vink Blueprint Read Only aan.

Merk op dat als u nu de variabele MaxGezondheid in de Blueprint sleept u enkel maar de GET kunt selecteren. U kunt dus enkel maar de waarde opvragen en niet wijzigen.


Samenvattende video

Onderstaande video toont nog eens wat hier besproken is met de nadruk op Datatypen.


Behandelde Basiscompetenties uit de module ICT Programmeren – Start to program

  • IC BC228 – kent de verschillende principes en onderdelen op basis waarvan een programma kan opgebouwd worden
  • IC BC229 – begrijpt de basisprincipes van programmeren
  • IC BC237 – kan een eenvoudig programma wijzigen
  • IC BC240 – kan een eenvoudig programma maken
  • IC BC352 – begrijpt het systeem en de functies die achter een programma zitten

Geef een reactie

  • 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.