Starten met programmeren van een 3D omgeving in Unreal Engine – Besturing

print
Deze handleiding maakt deel uit van het programmeertraject:


Inhoud


Wat vooraf ging


Inleiding

Assen

We spreken van een 3D wereld omdat er drie coördinaten, drie dimensies, zijn:

  • Lengte
  • Breedte
  • Hoogte

of

  • Forward
  • Right
  • Up


of

  • X
  • Y
  • Z

Rotatie

Voor rotatie worden ook vaak de onderstaande termen gebruikt:

  • Roll – rotatie rond de X-as.
  • Pitch – rotatie rond de Y-as.
  • Yaw – rotatie rond de Z-as.

Merk op dat in de laatste 2 afbeeldingen de X en Y ogenschijnlijk een andere richting uitwijzen, maar dit is maar schijn, de X-as is nog steeds Forward. Niets houdt u tegen het vliegtuigje de andere kant te laten opvliegen.

Unreal Engine gebruikt deze waarden eveneens. Bekijk hieronder de functionaliteit Make Rotator.

Transformatie

In een 3D wereld hebben we dus steeds 3 waarden nodig. Een variabele die deze 3 waarden kan bevatten is een Vector.

Locatie, Rotatie en Schaling bevatten allen 3 waarden en zijn dus allen vectoren.

  • Rood is de X-as.
  • Groen is de Y-as.
  • Blauw is de Z-as.

Locatie, Rotatie en Schaling maken alle drie deel uit van een Transformatie zoals de functionaliteit MakeTransform weergeeft.

Nu we dit even herhaald hebben kunnen we van start.

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

Ik ga ervan uit dat u tegen nu voldoende vertrouwd bent met het werken met Blueprint Visual Scripting dat ik niet langer de opbouw van de code hoef uit te leggen maar meteen de code zelf kan tonen met enkel de noodzakelijke duiding.


Besturing

Character

CharacterMovement wordt toegevoegd als een Component aan een Character Class.

CharacterMovement komt met tal van eigenschappen, een overzicht:

U kunt al deze eigenschappen instellen (Set) en opvragen (Get) via Blueprints.

U kunt de MovementMode bepalen via Set Movement Mode.

De besturing verloopt door de functie Add Movement Input en de waarde langs een van de assen (X-as, Y-as en Z-as) te wijzigen.

Neem een kijkje in de Event Graph van de ThirdPersonCharacter Blueprint. Meer specifiek naar de Movement input.

Deze code verzorgt de verplaatsing van ons Character. Laat ons deze code eens meer in detail bekijken.

  • Om te kunnen bewegen moet eerst geweten zijn waar ons Character, dat we besturen/controleren, zich bevindt en in welke richting hij kijkt. Deze informatie wordt verkregen via Get Control Rotation.
  • Omdat ons Character zich enkel maar voorwaarts/achterwaarts/rechts/links kan verplaatsen is enkel de Z (Yaw)-informatie van toepassing. Ons Character is immers geen vliegtuig en beweegt zich niet in de hoogte/laagte Y (Pitch) en kan ook niet kantelen X (Roll). Hiertoe wordt de verkregen rotatie-informatie opgebroken via Break Rotator en enkel de Z (Yaw)-informatie wordt doorgegeven om een nieuwe rotatie te maken via Make Rotator die de Z (Yaw)-informatie ontvangt en de X (Roll) en de Y (Pitch) op 0,0 zet.
  • Uit deze nieuwe rotatie-informatie wordt de voorwaart-informatie opgevraagd via Get Forward Vector en wordt de rechts-informatie opgevraagd via Get Right Verctor. Deze opgevraagde informatie bevat dus respectievelijk de voorwaartse richting en rechtse richting van ons Character.
  • Om voorwaarts (of achterwaarts) te gaan wordt InputAxis MoveForward gebruikt. Is de W-toets (of Up-toets) ingedrukt dan is de Axis Value 1,0, een positieve waarde en wordt voorwaarts bewogen. Is de S-toets (of Down-toets) ingedrukt dan is de Axis Value -1,0, een negatieve waarde en wordt achterwaarts bewogen.
  • Om naar rechts (of naar links) te gaan wordt InputAxis MoveRight gebruikt. Is de D-toets ingedrukt dan is de Axis Value 1,0, een positieve waarde en wordt naar rechts bewogen. Is de A-toetsingedrukt dan is de Axis Value -1,0, een negatieve waarde en wordt naar links bewogen.
  • De functie Add Movement Input zorgt voor de eigenlijke verplaatsing voorwaarts of achterwaarts van het Character door de waarde van Get Forward Vector te gebruiken als invoer voor de World Direction (de richting) en de waarde van InputAxis MoveForward te gebruiken als invoer voor de Scale Value (de afstand van de verplaatsing).
  • De functie Add Movement Input zorgt voor de eigenlijke verplaatsing links of rechts van het Character door de waarde van Get Right Vector te gebruiken als invoer voor de World Direction (de richting) en de waarde van InputAxis MoveRight te gebruiken als invoer voor de Scale Value (de afstand van de verplaatsing).

Plane

Onderstaande code, de besturing (voorwaartse snelheid en rotatie) van een vliegtuig, komt uit Blueprint van een FlyingPawn uit een project gebaseerd op de Flying Template.

  • De Tick-event wordt iedere frame uitgevoerd maar de framerate is afhankelijk van de hardware en dus niet constant. De Delta Seconds is als “de tijd tussen de frames” en deze is wel constant. Omdat de verplaatsing van ons “vliegtuigje” onafhankelijk moet verlopen van de hardware die de framerate bepaalt (anders zou het vliegtuigje op de ene pc harder vliegen dan op de andere) werken we met Delta Seconds.
  • De huidige snelheid, bepaald door de variabele Current Forward speed wordt vermenigvuldigt met de Delta Seconds.
  • Make Vector levert met de X-as de voorwaartse beweging die via AddActorLocalOffset wordt toegevoegd aan Delta Location  en dus ons vliegtuigje voortuit laat vliegen.
  • Get World Delta Seconds, ongeacht de framerate, wordt vermenigvuldigt met de variabelen Current Pitch Speed, Current Yaw Speed en Current Roll speed en vormt een nieuwe rotatie Make Rotator die wordt gebruikt voor de Delta Rotation van AddActorLocalRotation.

Vehicle

Aan een voertuig (Vehicle) kunt u, binnen de klasse, een VehicleMovement component toevoegen.

Dit VehicleMovement component bevat tal van eigenschappen die u kunt instellen.

De besturing is heel eenvoudig, u roept gewoon een aantal voorgeprogrammeerde functies aan.


Praktische voorbeelden

Sprinting

Onderstaande video toont een basisuitwerking van een Sprint.

Double Jump

Een Double Jump laat toe een tweede keer te springen gedurende de eerste sprong (terwijl u dus in de lucht bent).

Ladder

Het beklimmen van een ladder is iets moeilijker.

FPS Controller

Onderstaande video bouwt een eenvoudige FPS Controller vanaf nul.

Als uitbreiding op de vorige video een video die de tijd manipuleert.


Project Twin Stick Shooter – Hero Character Mobility


C++

C++ valt buiten de directe doelstellingen van deze opleiding, maar aangezien we reeds kennisgemaakt hebben met C++, ga ik, voor zij die willen, de handleidingen af en toe uitbreiding met een beetje C++.


Behandelde Basiscompetenties uit de module ICT Programmeren – Specifieke ontwikkelomgeving: complexe functionaliteiten

  • IC BC231 – kan modellen, simulaties of visualisaties van de realiteit maken
  • IC BC235 – kan gevorderde principes van programmeren in een specifieke ontwikkelomgeving toepassen
  • IC BC238 – kan een complex programma wijzigen
  • IC BC246 – kan complexe ontwerpen in een specifieke ontwikkelomgeving maken
  • IC BC251 – kan een ontwerp in een specifieke ontwikkelomgeving verfijnen
  • IC BC253 – kan broncode in een specifieke ontwikkelomgeving optimaliseren

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.