‫Hallo en welkom terug.
‫In deze video gaan we het hebben over hoe we onze tank kunnen versnellen.
‫We willen precies bepalen hoe snel onze tank beweegt.
‫En op dit moment gaan we in deze delta-locatievector gewoon door in add act, een lokale offset, en
‫we hebben geen controle over hoe snel de tank beweegt.
‫Het gaat eigenlijk heel langzaam.
‫Dus we gaan een snelheidsvariabele maken die we kunnen gebruiken om die snelheid te regelen.
‫En we gaan ook rekening houden met de framesnelheid van onze game, aangezien onze game de framesnelheid van frame tot
‫frame verandert.
‫We krijgen eigenlijk geen consistente beweging.
‫Dus om rekening te houden met die framesnelheid, gaan we het hebben over iets dat Delta Time wordt genoemd.
‫Dus we zijn hier in de editor en als ik op play druk en ik begin de tank te verplaatsen, is
‫het niet iets dat je echt kunt opmerken.
‫Maar onze tank beweegt niet in een constante snelheid van frame naar frame.
‫En de reden is dat onze framesnelheid verandert en hier linksboven in de viewport een kleine
‫vervolgkeuzelijst is.
‫Als ik daarop klik, staat er een selectievakje naast DPS PES betekent frames per seconde.
‫Als ik dit aanvink, dan zie ik rechtsboven mijn frames per seconde.
‫En net daaronder, hoeveel milliseconden zijn er verstreken sinds het laatste frame?
‫En deze waarden veranderen van frame tot frame.
‫Als ik op play druk, heb je het misschien gemist, maar de framesnelheid ging omlaag en kwam weer
‫omhoog omdat er tijdens die beginfase van het spel veel dingen gebeurden.
‫Alle acteurs riepen hun start-play-functies en er is een aantal achter de schermen opstelling voor de
‫wereld.
‫Nu, als ik het spel begin te spelen, veranderen die 120 apps die ik krijg van frame naar frame, ook
‫al zweeft het rond de 120.
‫Dus de reden dat dit inconsistente bewegingen veroorzaakt, is omdat naarmate de framesnelheid daalt, die
‫tick-updates minder vaak worden aangeroepen.
‫En als we deze tank elk frame met dezelfde hoeveelheid verplaatsen, vertrouwen we op die framesnelheid om
‫consistent te blijven, om die consistente beweging te krijgen.
‫En wanneer het spel ingewikkelder wordt, zullen de variaties in framesnelheid erger en erger worden.
‫Dus we moeten ervoor zorgen dat we ons daarvoor aanpassen door iets te gebruiken dat Delta Time heet.
‫Dus wat is deze mysterieuze Delta-tijd?
‫Laten we zeggen dat we deze tijdlijn hier hebben, beginnend bij 0 seconden en toenemend naarmate de tijd vordert.
‫Nu de tijd verder tikt, betekent dit dat de tick-functie wordt aangeroepen.
‫Maar merk op dat de tick-functie niet erg consistent is.
‫Soms wordt er heel snel gebeld en soms wordt er minder vaak gebeld.
‫Dit komt omdat uw computer frame voor frame berekeningen moet maken, en soms nemen die
‫berekeningen meer bronnen van uw computer in beslag, en dat kan onze framesnelheid vertragen.
‫Deze delta-tijdvariabele die we in de tick-functie hebben, is de hoeveelheid tijd die is verstreken
‫sinds het laatste frame.
‫Dus hier kan het 0 zijn. 1 seconden.
‫Het hangt echt af van het CPU-gebruik en hoe dat varieert.
‫Dus aangezien uw CPU-gebruik varieert, zal uw delta-tijd ook variëren.
‫En dit betekent dat wanneer we meer frames per seconde hebben, we meer functieaanroepen hebben.
‫Als we nu vaker lokale offset toevoegen, zullen we onze vijver sneller zien bewegen
‫en geen consistente bewegingssnelheid hebben.
‫Dus de oplossing is om de beweging te schalen met Delta-tijd.
‫Dus als Delta-tijd 0 is. 1 en we willen onze vijver bijvoorbeeld tien
‫centimeter per seconde verplaatsen en die beweging met 0 schalen. 1 seconde geeft ons de exacte hoeveelheid beweging die we nodig hebben voor een frame-updatetijd
‫van 0. 1 seconden.
‫Beschouw nu dit deel hier waar we een kleinere delta-tijd hebben, wat betekent dat TIC vaker wordt
‫aangeroepen.
‫Laten we zeggen dat de deltatijd hier 0 is. 0 1 seconden.
‫Dus TIC wordt hier tien keer vaker gebeld.
‫Welnu, we kunnen onze beweging eenvoudig met 0 schalen. 01 voor dit specifieke frame, en op die manier verplaatsen we onze
‫vijver met tien centimeter per seconde keer, 0. 0 1 seconden.
‫Dus daarom verplaatsen we de vijver een klein beetje omdat TIC veel vaker wordt gebeld.
‫Als u dit doet, zorgt u ervoor dat onze vijver op een consistente manier beweegt, onafhankelijk van de veranderingen in de
‫framesnelheid.
‫Dus hier in VSE-code, laten we eens nadenken over hoe we dit probleem willen oplossen.
‫We hebben onze delta-locatievector en we stellen de x gelijk aan de waarde, maar we weten dat we de
‫waarde willen schalen met Delta-tijd.
‫Dus ik ga hier een kleine opmerking plaatsen en zeggen dat X gelijk is aan waardetijden, deltatijd, wat betekent dat we de
‫waarde willen schalen met Deltatijd.
‫Als we dit eenmaal hebben gedaan, gaan we de waarde heel klein maken omdat Delta-tijd zelf een heel
‫kleine waarde is, vooral als je framesnelheid erg hoog is.
‫Dus we zullen dit ook ergens mee moeten schalen.
‫Anders een soort snelheidsvariabele, en we kunnen beslissen wat deze waarde moet zijn om de tanksnelheid
‫te regelen.
‫Dus we hebben hier een klein beetje pseudocode om ons te begeleiden en we hoeven dit nu alleen maar te implementeren door
‫een waarde voor snelheid te creëren en uit te zoeken hoe we deze delta-tijdwaarde kunnen krijgen.
‫Laten we het dus hebben over hoe we toegang kunnen krijgen tot Delta-tijd vanuit de verplaatsingsfunctie.
‫Nu heeft Unreal Engine meerdere manieren om Delta-tijd te bemachtigen.
‫Als je kijkt naar de vinkfunctie die we hebben op basis van Delta, dan is tijd een float-invoerparameter.
‫Dus als we in de tick-functie werken, hebben we al toegang tot Delta-tijd, maar in tank-DHCP
‫heeft onze move-functie die invoerparameter niet, maar de onwerkelijke engine heeft zijn manieren.
‫Een manier is om toegang te krijgen tot een functie genaamd get world delta seconds, die bestaat in een klasse genaamd U
‫gameplay statics.
‫Zoals de naam al doet vermoeden, heeft gameplay-statica veel statische functies die helpen bij het programmeren van gameplay.
‫Get World Delta-seconden retourneert delta-tijd.
‫Nu heeft het een invoerparameter.
‫Hier is een wereldcontextobject nodig.
‫Je zult dit veel zien in Unreal Engine.
‫Voor veel statische functies is een wereldcontextobject vereist.
‫De wereld is een object van het type je wereld.
‫Het is het object op het hoogste niveau van ons spel.
‫Het vertegenwoordigt onze kaart die alle bijbehorende objecten in ons spel bevat.
‫Nu hebben statische functies zoals get world delta seconds geen idee in welke wereld we ons bevinden.
‫We moeten deze functie vertellen in welke wereld we ons bevinden, zodat hij toegang kan krijgen tot die wereld en die delta-tijdwaarde
‫kan krijgen.
‫Om te vertellen in welke wereld we ons bevinden, kunnen we een aanwijzer doorgeven naar een object dat in die
‫wereld bestaat.
‫Terwijl we in de tankklas werken, kunnen we het sleutelwoord dit doorgeven.
‫Dit is een sleutelwoord dat we binnen elke klasse in C++ kunnen gebruiken.
‫Wat dit sleutelwoord is, is een verwijzing naar de instantie van een bepaald object waarin we werken.
‫Dus als we in de tankklasse werken, is dit een verwijzing naar de tank waarin we ons bevinden.
‫Dus functies die een wereldcontextobject nodig hebben, kunnen dit vaak als invoerparameter ontvangen omdat de tank waarin
‫we werken in de juiste wereld bestaat.
‫Dus haal werelddeltaseconden zullen weten in welke wereld het is en kunnen ons de juiste delta ophalen.
‫Tijd voor die wereld.
‫Dus als we 'get world delta seconds' uit de klasse --- halen, geven we dit
‫door als het wereldcontextobject.
‫Dus je hebt nu alle tools die je nodig hebt om de snelheid van de tank te regelen.
‫Dus wat je gaat doen, is een snelheidsvariabele maken, dit een float maken en deze in een
‫privégedeelte in de tankklasse plaatsen.
‫Stel dit nu bloot aan blauwdrukken, zodat we het kunnen aanpassen terwijl we aan het ontwikkelen zijn, wat
‫betekent dat je het een eigen eigendom gaat geven en de juiste specificaties voor je eigendom gebruikt die overeenkomen met
‫het blootstellingsniveau dat je zou willen.
‫Nu hebben we in de MOV-functie dat stukje pseudocode dat we als commentaar hebben geplaatst.
‫Gebruik dat dus als richtlijn.
‫Je neemt de delta-locatie, F-vector en schaal.
‫Het is X per deltatijd.
‫We hebben zojuist gezien hoe we toegang kunnen krijgen tot delta-tijd met behulp van U-gameplay-statistieken.
‫En je gaat X ook schalen met de snelheidsvariabele.
‫Omdat we nu een functie in gameplay-statistieken gebruiken, moet je het headerbestand
‫voor gameplay-statistieken opnemen.
‫Nu heb ik je meerdere keren laten zien hoe ik de include voor een bepaalde klasse vind met behulp van
‫de onwerkelijke motordocumentatie.
‫Dus ik daag je uit om te zoeken naar je gameplay-statistieken in de Unreal Engine-documentatie en
‫dat headerbestand te vinden.
‫En als je het niet kunt vinden, zoek dan gewoon de link in de bronnen voor deze video, die
‫je de documentatie voor je gameplay-statistieken geeft, maar probeer het zelf te vinden.
‫Pauzeer eerst de video en regel nu de tanksnelheid.
‫Oké.
‫Dus ik heb mijn pseudo-code om me te begeleiden en ik moet de waarde schalen op delta-tijd en op snelheid.
‫Dus eerst ga ik mijn snelheidsvariabele maken.
‫Nu terug in tank h.
‫Hier kan ik de snelheidsvariabele plaatsen.
‫Als je je echter herinnert van een oefenoefening in een eerdere lezing, heb ik een dobber met de naam Speed toegevoegd
‫aan de Base Pond-les.
‫Nu heb ik de snelheidsvariabele hier in de basisvijver niet nodig.
‫Dit was gewoon oefenen, dus ik heb het hier niet echt nodig.
‫In feite heb ik deze andere 30 tweeën die ik heb gemaakt niet nodig om aan te tonen dat jullie eigendomsspecificaties zijn.
‫Dus ik ga deze allemaal markeren en ze verwijderen uit de basisvijverklasse.
‫Ik wil ze niet meer.
‫Dus ze zijn weg.
‫Nu herinner je je misschien ook dat ik naar die snelheidsvariabele in de blauwdruk van de vijvertank verwees.
‫Dus ik ga de BP-vijvertank openen.
‫En hier in de gebeurtenisgrafiek is die snelheidsvariabele waar ik naar verwees.
‫Omdat ik dit niet langer nodig heb, ga ik door en verwijder die knooppunten en compileer
‫en bewaar mijn BP-vijvertank.
‫Oké.
‫Nadat ik dat allemaal heb opgeruimd, ga ik terug naar de tank om mijn snelheidsvariabele toe te voegen.
‫En dit komt hier in het privégedeelte.
‫Ik ga het net boven de verplaatsingsfunctie toevoegen en het wordt een vlotter genaamd snelheid.
‫Nu ga ik het hier een beginwaarde geven.
‫Ik denk dat ik 200 F ga proberen en kijken hoe dat werkt.
‫Maar aangezien ik dit in de editor wil kunnen bewerken terwijl ik aan het ontwikkelen ben, krijgt het een nieuwe
‫eigenschapmacro en ik zou dit graag op instanties en op de standaard willen kunnen bewerken.
‫Dus ik ga het overal bewerken.
‫Je hoefde dit niet te doen, maar ik geef het een categorie.
‫Ik zal een nieuwe categorie maken met de naam beweging.
‫Nu is het optioneel om het bloot te stellen aan de gebeurtenisgrafiek.
‫Ik ga dat uitstellen omdat ik niet denk dat ik het in de gebeurtenisgrafiek nodig heb.
‫Als ik moet.
‫In de toekomst kan ik het blootleggen met blauwdruk, lezen, schrijven of blauwdruk alleen lezen en die meta gebruiken
‫om privétoegang toe te staan.
‫Maar voorlopig doe ik dat niet.
‫Dus ik heb een snelheidsvariabele en hier in DHCP van de tank, ga ik de waarde nemen en deze op snelheid schalen.
‫Het laatste wat je moet doen, is de waarde schalen op delta-tijd, wat betekent dat ik je gameplay-statistieken nodig heb.
‫Dus hier is de documentatie van Unreal Engine.
‫Ik ga door en zoek naar je gameplay-statistieken en hier is het je game-gameplay-statistieken.
‫Dus ik hoef alleen maar naar beneden te scrollen naar de include-regel en dit te kopiëren en terug in tank CP.
‫Ik kan het erin plakken.
‫Nu ik toegang heb tot nieuwe gameplay-statistieken, kan ik Delta-tijd krijgen, dus ik ga met jou vermenigvuldigen.
‫Gameplay-statistieken krijgen werelddeltaseconden en zoals we zagen, heeft dit een wereldcontextobject nodig.
‫Je kunt zelfs met de pop-up zien dat het om een wereldcontextobject vraagt.
‫Ik sla hier dus over.
‫Dus nu ik Delta-locaties X instel om tijden, snelheid, tijden, delta-tijd te waarderen, ga ik dit
‫compileren.
‫Dus we hebben een succesvolle compilatie.
‫Dus hier in de editor, ik kan naar BP Pond Tank gaan en daar is mijn snelheid.
‫En als ik de instantie van de tank in de wereld selecteer, kan ik in het detailvenster zoeken naar beweging en daar is
‫de snelheid en ik kan deze op elke gewenste waarde instellen.
‫Als ik dit opdraai en op play druk, dan ga ik een stuk sneller.
‫Dit is dus het voordeel van het blootstellen van de variabele aan blauwdrukken.
‫Ik kan experimenteren en een goede snelheid vinden die voor mij werkt.
‫Oké, dus dat ziet er goed uit.
‫Ik ga door en stop nu met het tonen van de FPSO.
‫En nu hebben we onze snelheidsvariabele en kunnen we deze veranderen.
‫En die verandering zal worden weerspiegeld in de beweging van mijn pion.
‫Dus we controleren nu de bewegingssnelheid van onze tank en we hebben een mooie snelheidsvariabele die we blootstellen
‫aan blauwdrukken en we kunnen dat instellen terwijl we een experiment met zijn waarde ontwikkelen.
‫We hebben ook geleerd over Delta-tijd en waarom het belangrijk is om onze beweging op Delta-tijd te schalen.
‫Het is dus framerate-onafhankelijk omdat de framerate-veranderingen nog steeds soepele, consistente bewegingen met onze tank
‫krijgen.
‫Dus als we terugkijken op ons sectieplan, zijn we bijna klaar met ons eerste opsommingsteken.
‫We hebben een tank gemaakt die over de hele wereld kan bewegen.
‫Ons tweede punt is om invoer met WASD-toetsenbordbewegingen en muisinvoer ook af te handelen.
‫We hebben dat W- en SW-gedeelte naar beneden, maar we moeten nog steeds de A- en D-toetsen kunnen gebruiken en die gaan
‫we gebruiken om de tank te draaien.
‫We maken dus goede vorderingen in de komende video's.
‫We zullen werken aan het afmaken van ons vermogen om de tank te verplaatsen.
‫Ik zie je snel.