‫Welkom terug.
‫Nu hebben we een spelmodus en we willen de spelmodus gebruiken om te bepalen wanneer we het spel kunnen starten.
‫Nu hebben sommige games een vertraging of een afteltimer die begint wanneer de game begint.
‫En na een bepaalde tijd mag de speler het personage of in ons geval de
‫tank rond de wereld verplaatsen.
‫Dus dat gaan we in deze video implementeren.
‫Dit houdt in dat je eerst de invoer moet uitschakelen, zodat we niet kunnen bewegen wanneer het spel voor het
‫eerst begint en dan gaan we een timer instellen en na een bepaalde tijd kunnen we invoer inschakelen.
‫Dus laten we teruggaan naar het afstemmen van de spelmodus Tanks en hier een paar dingen toevoegen.
‫Ten eerste wil ik een float toevoegen voor de hoeveelheid tijd die moet verstrijken wanneer het spel begint voordat we
‫kunnen beginnen met bewegen.
‫Dus deze float wordt startvertraging genoemd en ik ga dit initialiseren naar drie punt F, zodat we 3 seconden
‫moeten wachten voordat we het spel kunnen starten.
‫Nu, zodra het spel begint, wil ik deze timer starten, wat betekent dat ik een functie wil die
‫deze timer start, en ik ga hier ook een privéfunctie van maken.
‫Ik ga hier een ongeldige functie van maken genaamd 'handle game start'.
‫Nu kan ik het starten van het spel in de spelmodus Tune Tanks implementeren.
‫Ga hier naar beneden onder begin met spelen.
‫Nu zal ik niet vergeten om de naam van de spelmodusklasse van tune tanks toe te voegen en nu heb ik een startfunctie voor het spelen
‫van games.
‫Nu zou de plaats om dit te noemen Begin Play zijn.
‫Sinds Begin Spelen wordt aan het begin van het spel genoemd.
‫Dus ik ga handvat spel noemen, begin hier en begin met spelen.
‫En aangezien we hier aan het begin van het spel een aantal dingen doen, waarbij de tank
‫en de afstemming van tanks, speler en controllervariabelen worden ingesteld, zou ik deze willen verplaatsen naar het begin van het spel.
‫Dus ik ga die helemaal naar beneden verplaatsen naar de start van het spel en op die manier zal de spelercontroller
‫voor tank en tune tanks worden ingesteld, omdat we het begin van het spel hier noemen en beginnen met spelen.
‫Dus hier wil ik een afteltimer starten waarna we gebruikersinvoer kunnen inschakelen.
‫Voordat we de timer starten, ga ik de invoer uitschakelen, zodat we de tank nog niet kunnen verplaatsen.
‫En dat vereist onze functie.
‫We hebben hier in tune-tanks geplaatst, spelercontroller genaamd set player enabled state.
‫En dat betekent dat ik tune tanks, player controller ga gebruiken.
‫En als ik de spelercontroller van tune tank ga gebruiken, is het een goed idee om ervoor te zorgen dat deze geldig is.
‫Dus ik ga zeggen als tune tanks, player, controller en als we de binnenkant
‫van deze if-statement bereiken, dan kan ik tune tanks, player controller en call set player enabled status nemen en in false doorgeven.
‫En op die manier kan onze tank niet bewegen.
‫En ik zie de rode kronkels en dat komt omdat ik zei tanktanks, spelercontroller in plaats van tanks af te
‫stemmen.
‫Dus als ik het correct schrijf, krijg ik daar geen fouten.
‫Dus nu moeten we een timer starten.
‫Nu weten we dat timers het gebruik van een F-timerhandle inhouden en we kunnen een F-timerhandle maken in plaats
‫van een lidvariabele te hebben die bij de klasse hoort.
‫Dus ik ga door en doe dat en ik noem deze speler timer inschakelen.
‫En vervolgens moeten we nu een timer instellen voor de callback-functie voor onze timer. Ik wil graag de set
‫player enabled state gebruiken, maar de set player enabled state is een functie die een invoer van het type boolean vereist.
‫Nu hebben we niet gezien hoe een timer in te stellen met behulp van een callback waarvoor invoerparameters vereist zijn.
‫Dit gaat gepaard met een nieuw concept dat een timer-afgevaardigde wordt genoemd.
‫Laten we dus eens kijken naar het timersysteem van Unreal Engine.
‫Nogmaals, we weten dat er een wereldtimermanager is die onze timers beheert en een ingestelde timerfunctie heeft.
‫Nu zijn er meerdere overbelastingen van de ingestelde timerfunctie.
‫We hebben er al een gezien.
‫Nu ga ik het hebben over een andere versie van deze functie.
‫En deze versie vereist een timer-handle, een timer-rate of een vertragingstijd waarin we moeten wachten voordat
‫onze callback-functie wordt aangeroepen.
‫En in plaats van het adres van een callback-functie rechtstreeks te nemen, kan het een timer-afgevaardigde worden
‫genoemd.
‫Dit is een structuur van het type F timer-delegate, waarmee we een object kunnen maken dat er rechtstreeks een functie aan
‫kan binden.
‫En timer-afgevaardigden kunnen functies binden waarvoor invoerparameters nodig zijn.
‫Nu kunnen we een EF-timer gedelegeerde variabele maken en deze initialiseren met behulp van de functie Create you object
‫van f timer delegate.
‫Hiermee wordt een nieuwe timer-afgevaardigde gemaakt en geïnitialiseerd op basis van wat we tussen haakjes doorgeven.
‫Hiervoor is een gebruikersobject nodig dat van is.
‫Natuurlijk, de klasse waarop onze callback-functie bestaat.
‫En vervolgens neemt het het adres van de callback-functie zelf, gevolgd door eventuele invoerwaarden die we willen
‫doorgeven aan onze callback zodra deze wordt aangeroepen.
‫Van daaruit kunnen we de timer instellen vanuit de wereldtimermanager en de overbelasting gebruiken die een timer-afgevaardigde nodig
‫heeft.
‫Deze overbelasting vereist de timer-handle zelf, de timer-delegate, de afspeelsnelheid of een float die de vertraging bepaalt voordat
‫onze callback wordt aangeroepen, en vervolgens een boolean om te bepalen of onze timer al dan niet
‫moet herhalen, zodat we weten hoe we een F timer afgevaardigde.
‫Dus ik zou graag willen dat je er een maakt in de startfunctie van het handvat in onze nieuwe if-instructie.
‫Maak dus een lokale f timer delegate aan en gebruik f timer delegate.
‫Maak je object.
‫Nu moeten we een gebruikersobject doorgeven en meestal hebben we dit als gebruikersobject gebruikt, maar
‫de functie die we willen aanroepen, bestaat op de spelercontroller.
‫Dus geef de spelercontroller met variabele tune-tanks door als de eerste invoer die het gebruikersobject zal zijn
‫en de callback-functie zal worden ingesteld voor de speler ingeschakeld staat die functie die we hebben toegevoegd aan
‫onze aangepaste spelercontroller.
‫Vergeet het adres van de operator niet en als derde invoer gaan we de waarde doorgeven.
‫Toegegeven, dit is wat wordt doorgegeven aan de status 'set player ingeschakeld' wanneer onze callback aan het einde van de
‫timer wordt gebeld.
‫Dus pauzeer de video en probeer dit nu eens.
‫Dus net onder onze timer-handle ga ik een lokale F-timer-afgevaardigde maken en ik
‫ga deze speler inschakelen timer-afgevaardigde noemen.
‫Dat is goed.
‫Als je het iets anders noemde.
‫Nu ga ik dit initialiseren met f timer, delegate, create you object.
‫En hiervoor is eerst een gebruikersobject nodig en dat wordt onze spelercontroller voor tune tanks.
‫Dus ik ga zeggen tune tanks player controller als de eerste input.
‫En voor de tweede hebben we onze callback-functie nodig en dat wordt een tune tanks
‫player, controller set player enabled state.
‫En ik kan het niet vergeten, ik heb het adres van de operator nodig voor dit functieadres en de waarde die
‫ik zou willen doorgeven aan deze callback-functie zal op die manier waar zijn.
‫Aan het einde van de vertragingstijd, wanneer deze callback true wordt genoemd, wordt de waarde doorgegeven aan
‫de callback-functie.
‫Nu ben ik klaar om Set Timer te bellen, wat betekent dat ik World Timer Manager moet bellen.
‫En vanaf daar kan ik de timer instellen.
‫En de functie-overbelasting die we gebruiken, heeft eerst een timer-handvat nodig en dat wordt een timer-handvat voor het inschakelen
‫van de speler.
‫De volgende input die ik ga doorgeven is de afgevaardigde.
‫Dus dat wordt player enable, timer delegate.
‫Volgende.
‫We hebben onze vertragingstijd nodig en dat wordt de startvertraging, de float die we zojuist hebben gemaakt.
‫Dus vervolgens passeer ik met startvertraging.
‫En tot slot wil ik niet dat deze timer een lus maakt, dus ik ga 'false' doorgeven zodat we geen
‫lusgedrag krijgen.
‫Nu ga ik door en laat deze invoer inspringen, zodat het er mooi uitziet.
‫En nu noemen we timer instellen met onze nieuwe timer-afgevaardigde.
‫En aan het einde van deze vertragingstijd zouden we onze callback-functie set player-enabled state moeten krijgen aangeroepen met de
‫waarde true die nu is doorgegeven, aangezien de startvertraging 3 seconden is en we de set player
‫enabled state-passing in false aanroepen voordat we onze timer instellen.
‫Als we op play drukken, zouden we niet moeten kunnen bewegen totdat deze vertraging van drie seconden voorbij is.
‫Dus laten we dit compileren en kijken hoe het werkt.
‫Dus ik ga door en druk op play en ik probeer me te verplaatsen, maar dat lukt niet.
‫En na 3 seconden kan ik ineens bewegen.
‫En kijk hier ook eens naar.
‫Merk op dat mijn cursor het vizier is.
‫Het is misschien moeilijk te zien op het scherm, maar je zou het prima op je scherm moeten kunnen zien.
‫En dit maakt het voor mij een stuk gemakkelijker om mijn tanks te richten en te besturen.
‫Rotatie van het torentje.
‫Perfect.
‫Dus samenvattend hebben we een functie voor het starten van een game gemaakt voor de spelmodus en we noemen dit en
‫beginnen met spelen.
‫En we hebben ook een timer ingesteld met behulp van een timer-afgevaardigde waarop we onze set player-enabled state-functie op de
‫spelercontroller hebben gebonden.
‫Hierdoor konden we een functie-callback voor onze timer hebben die invoerparameters nodig heeft en we gebruiken deze om gebruikersinvoer mogelijk
‫te maken na een vertraging van drie seconden wanneer het spel begint.
‫Dit kan frustrerend zijn voor een speler als ze niet een soort van visuele cue hebben, om ze te
‫laten weten dat invoer niet is ingeschakeld.
‫Iets als een aftelling op het scherm.
‫Dus daar zullen we in toekomstige video's voor zorgen.
‫Maar voor nu gefeliciteerd.
‫U weet nu hoe u een functie kunt binden die invoerparameters nodig heeft voor een timer-gemachtigde.
‫Ik zie je in de volgende video.