‫Hallo en welkom terug.
‫Nu hebben we een tank gemaakt die kan bewegen en zelfs zijn torentje kan draaien.
‫En we zijn nu klaar om een torenklasse te maken die een deel van de functionaliteit kan erven
‫die de tank heeft geërfd van de basispodklasse.
‫Nu, als we eenmaal een torenklasse hebben gemaakt, gaan we de tick-functie overschrijven, zodat we ook
‫zijn torentje kunnen draaien.
‫Dus ons doel hier is om de torentjes zo te laten draaien dat ze altijd naar de tank kijken.
‫Op deze manier zullen ze, wanneer ze projectielen beginnen af te vuren, de tank soms raken zolang de tank niet
‫snel uit de weg gaat.
‫En we gaan ook uitzoeken hoe we de tank te pakken kunnen krijgen --.
‫Op die manier kunnen we de tank richten -- en de toren van de toren naar de tank draaien --.
‫We maken ons klaar voor een projectielgevecht.
‫Dus ik ben hier in de editor en ik ga naar onze tune tanks-map waar de basis
‫- en de tankklassen zijn.
‫Nu wil ik een torenklasse maken op basis van de basisklasse.
‫De manier waarop we dit deden met de tankklasse was dat we gelijk hadden.
‫Geklikt op base -- en geselecteerd C++-klasse maken afgeleid van gebaseerd op een alternatieve manier is om naar
‫tools te gaan en een nieuwe C++-klasse te selecteren.
‫En vanaf hier kunnen we op het tabblad klikken dat alle klassen zegt en zoeken naar basis --.
‫En hier zien we onze basis -- klasse.
‫Als ik dit selecteer en op volgende klik, maak ik nu een nieuwe klasse op basis van base --.
‫Ik laat het op hetzelfde pad als al onze andere C++ klassen en ik ga deze toren noemen.
‫Dus laten we klikken op Klasse maken.
‫Dus hier is mijn nieuwe torentijdperk en Tower Dot.
‫CP Nu is het eerste dat we nodig hebben de tick-functie, omdat de toren zijn torentje wil draaien om
‫naar de -- te kijken.
‫Dus we gaan de tick-functie hier overschrijven.
‫Dus ik ga een nieuwe openbare sectie maken en we gaan virtual void tick typen, waarvoor een float nodig
‫is, Delta Time genaamd, en dit is een override.
‫Nu zullen we in toekomstige video's meer in detail treden over virtueel en overschrijven, maar we nemen in
‫wezen de overgenomen tick-functie en creëren er een nieuwe implementatie voor.
‫Dus laten we de vinkfunctie nemen en deze hier in Tower CP implementeren.
‫Nu moeten we de naam van de vinkfunctie laten voorafgaan door een toren en de dubbele dubbele punt.
‫En zoals altijd is het een goed idee om supertick te bellen en moeten we in Delta-tijd passeren.
‫Wat ik hier zou willen doen, is de tankkoepel draaien zodat de toren de tank bedreigt en klaar is
‫om projectielen af te vuren.
‫Maar ik zou dit alleen willen doen als de tank binnen bereik is.
‫Nu, om te weten of de tank binnen bereik is, moeten we de afstand weten van de toren
‫tot de tank.
‫Hier is een kleine gadget die de oorsprong van de wereld vertegenwoordigt.
‫Met andere woorden, het punt in de ruimte waar X, Y en Z nul zijn.
‫Als we het hebben over de locatie van een acteur, hebben we het over de vector van de oorsprong naar
‫die locatie.
‫En we kunnen die locatievector altijd krijgen met behulp van get actor location, zodat we de locatie van een van de torens
‫en de locatie van de tank kunnen krijgen.
‫En als we die twee locaties kennen, kunnen we de afstand ertussen berekenen.
‫We zouden dit kunnen doen met vectorwiskunde, maar de F vectorklasse heeft een functie genaamd dist, en
‫deze functie gaat naar locatievectoren en wat het teruggeeft is de afstand ertussen.
‫Dus hier in het toren-CP-bestand, in de tick-functie, ga ik een paar aantekeningen maken zodat we weten wat
‫we moeten doen.
‫Eerst moeten we de afstand tot de tank vinden na die controle om te zien of de tank binnen bereik is
‫en indien binnen bereik de toren naar de tank draaien.
‫Dus we hebben hier wat te doen.
‫Nu, om de afstand tot de tank te vinden, moeten we de tank te pakken krijgen.
‫Een goede plek om dat te doen is in Begin Play.
‫Laten we dus naast de vinkfunctie doorgaan en Begin Play negeren.
‫Merk nu op dat in Tank H het spel begint in een beschermde sectie.
‫We gaan het ook in de toren beschermen.
‫Dus we plaatsen het beveiligde gedeelte net onder het openbare gedeelte en implementeren het begin van het spel net onder het
‫vinkje.
‫Dus laten we naar Tower Dot, CP gaan, implementeren, beginnen met spelen, de functienaam volledig kwalificeren en zoals je waarschijnlijk
‫al geraden hebt, noemen we Super Begin Play.
‫Om nu de tank te krijgen en in een variabele op te slaan, hebben we een variabele van het type tank nodig.
‫Dus we gaan dat hier in Towers H in een privégedeelte plaatsen.
‫Dit wordt een A-tank, het is een wijzer en we kunnen deze tank gewoon noemen.
‫En om te voorkomen dat we Tank H hier moeten opnemen, kunnen we naar voren verklaren dat we hebben gezien hoe belangrijk
‫dat kan zijn.
‫Dus nu hebben we deze tankaanwijzer en als we erachter kunnen komen hoe we toegang kunnen krijgen tot de tank, kunnen we deze
‫hier in onze tankaanwijzer opslaan en beginnen met spelen.
‫Het eerste wat ik ga doen is Tank H opnemen, zodat we het type echt kunnen gebruiken.
‫Dus hoe krijgen we toegang tot de tank?
‫Welnu, hier is de onwerkelijke engine-documentatie voor een handige functie genaamd speler pion ophalen.
‫Het bestaat in een gameplay-statistieken.
‫Dus aangezien ik dit open heb, ga ik verder en kopieer ik de include voor gameplay-statistieken en bekijk
‫ik de syntaxis.
‫Het heeft twee ingangen, een wereldcontextobject.
‫We weten al hoe we daarmee om moeten gaan en een spelersindex.
‫En zoals we zagen voor spellen voor één speler zoals de onze, zal de spelersindex altijd speler nul zijn en
‫dat geeft ons toegang tot de pion die overeenkomt met speler nul.
‫Dus laten we deze functie hier in Tower Dot CP noemen.
‫Ik ga de include voor je gameplay-statistieken plakken en in het begin van het
‫spel ga ik de tank gelijk stellen aan je gameplay-statistieken get player -- voor het wereldcontext-object.
‫Ik kan hierin passen en voor de spelersindex kunnen we in nul passen.
‫Kijk nu eens naar de rode kronkel.
‫Er staat dat een waarde van het type een pion niet kan worden toegewezen aan een entiteit van het type A-tank.
‫Dit is exact hetzelfde probleem dat we tegenkwamen toen we probeerden te bellen, controller te krijgen en het resultaat
‫op te slaan in een A-spelercontroller.
‫Een tank is een kind van een pion, dus we kunnen geen oudertype in een kindaanwijzer opslaan.
‫We moeten.
‫Je raadt het al, we moeten werpen.
‫We gaan hier dus de waarde van nemen en deze in een cast-functieaanroep plaatsen.
‫Dus we gaan zeggen cast en we casten naar een tank.
‫En wat we doorgeven om te casten, is deze oproep om spelersvijver te krijgen.
‫Dus laten we dat tussen haakjes zetten.
‫En na de cast hebben we toegang tot de tank.
‫Dus nu we toegang hebben tot de tank, kunnen we de afstand tot de tank vinden en een afstand is een vlotter.
‫We kunnen dus een lokale float-variabele maken die afstand wordt genoemd.
‫En waar we het gelijk aan gaan stellen, is het resultaat van het aanroepen van de F vector statische functie dist.
‫Dist neemt nu twee invoerparameters van het type F vector.
‫Nu willen we de afstand tussen twee punten in de ruimte.
‫Een daarvan is de locatie van de toren.
‫We zitten in de torenklasse, dus we kunnen de locatie van de acteur bellen en dat geeft ons de locatie van de toren.
‫Maar hoe zit het met de tank?
‫We kunnen de tank bellen, de locatie van de acteur opvragen, en nu hebben we de afstand.
‫Het enige probleem is dat we de tankaanwijzer gebruiken zonder eerst te controleren of deze niet null
‫is.
‫Dus we moeten eerst if tank zeggen en dan kunnen we deze functieaanroep aannemen en deze naar hier binnen de
‫if-instructie slepen.
‫Dus als de tank geldig is, hebben we toegang tot de locatie met de locatie van de acteur.
‫Uitstekend.
‫Aangezien we in deze if-verklaring werken, ga ik deze andere opmerkingen hier naar binnen verplaatsen omdat we
‫weten dat we niet kunnen controleren of de tank binnen bereik is, als de tank niet eens geldig is.
‫Dus ik daag je uit om de toren naar de tank te draaien.
‫Nu willen we dit alleen doen als de tank binnen bereik is, we hebben de afstand.
‫Dus nu hebben we een vuurbereikvariabele nodig.
‫Dus maak een vlotter genaamd vuurbereik in de torenklasse en stel deze bloot met je eigendom.
‫We willen dit graag vanuit de editor kunnen bewerken.
‫Nu ga je kijken of de tank binnen bereik is.
‫Als het 'roteer torentje' wordt genoemd, moet het draaitorentje naar het doel worden gekeken.
‫Je gaat langs de tanklocatie.
‫Dus pauzeer de video en implementeer dit gedrag nu.
‫Oké.
‫We hebben dus een vuurbereikvariabele nodig.
‫Dus hier in Toren H hebben we een privégedeelte.
‫We gaan een vlotter maken.
‫Ik ga dit vuurbereik noemen en ik ga door en initialiseer het naar een waarde van, laten we
‫zeggen, 300 F.
‫Maar we zullen hiermee experimenteren, want het wordt jouw eigendom.
‫Dus je eigendom.
‫En aangezien ik wil dat alle tanks hetzelfde vuurbereik hebben, ga ik dit maken en het is
‫alleen standaard.
‫Dus op die manier kunnen we het alleen bewerken op de standaardblauwdruk.
‫Als je de jouwe nu ergens hebt bewerkt of misschien alleen de instantie hebt bewerkt, is dat helemaal goed.
‫Het is echt een kwestie van voorkeur en we kunnen het later veranderen.
‫Ik ga het ook een categorie geven en ik ga deze categorie gevechten noemen.
‫Laten we naar Tower CP gaan en we hebben hier het volgende punt.
‫Controleer of de tank binnen bereik is, wat betekent dat we moeten controleren of de afstand kleiner is dan
‫of gelijk is aan het vuurbereik.
‫We hebben kleiner dan of gelijk aan en niet gewoon gelijk aan, want van frame tot frame
‫kan de afstand in feite groter zijn dan vuurbereik, één frame en kleiner dan vuurbereik het volgende frame volledig voorbij
‫vuurbereik.
‫Het kan dus eigenlijk nooit precies gelijk worden aan het vuurbereik.
‫In feite, met drijvende-kommawaarden, is het vrij zeldzaam dat twee floats precies gelijk zijn.
‫Dus we hebben dit als controle en als we de binnenkant ervan bereiken, betekent dit dat de afstand kleiner is dan of gelijk is
‫aan het vuurbereik.
‫De tank is nu binnen bereik, wat betekent dat deze opmerking daarheen kan worden verplaatst.
‫Nu, als je binnen bereik bent, draai je de toren naar de tank, dat betekent dat we de functie voor het draaien van de
‫toren gaan aanroepen.
‫Dat is onze beveiligde functie die we in de basispod hebben gestopt.
‫Draai nu het torentje en kijk naar het doel en we hebben de locatie van de tank nodig.
‫Dus dat wordt de locatie van de tank-acteur.
‫En daarmee noemen we nu alleen roteren torentje als de tank binnen bereik is.
‫Dus laten we dit compileren en kijken hoe het werkt.
‫Dus we zijn weer terug in de editor en wat we moeten doen is naar blauwdrukken, pionnen gaan en
‫een BP-piontorentje vinden en de volledige blauwdrukeditor openen.
‫Nu rechtsboven zien we de basispion van de bovenliggende klasse, maar we willen dat onze bovenliggende klasse de toren is, zodat we naar
‫de klasse-instellingen, de bovenliggende klasse kunnen gaan en naar de toren kunnen zoeken en deze kunnen selecteren.
‫Nu is onze piontoren gebaseerd op de torenklasse.
‫Laten we nu eens kijken wat er gebeurt als we op play drukken.
‫Oké, dus ik verplaats de tank.
‫We zijn niet binnen bereik, dus we zien geen beweging van de torens.
‫Maar als ik binnen bereik kom, kijk daar dan naar.
‫Nu volgen ze me en het ziet er nogal dreigend uit.
‫Nu 300 eenheden is niet zo ver weg.
‫Dus wat ik zou willen doen is die afstand bewerken.
‫Dus vanaf hier in BP Pawn Turret, ga ik zelf BP Pond Turret selecteren.
‫En hier is het gevechtsgedeelte.
‫Ik ga door en stel dit in op ongeveer 700.
‫Als ik nu op play druk, zal ik ervoor zorgen dat ze niet ronddraaien terwijl ik hier terugkom.
‫Maar zodra ik binnen bereik ben, kijken ze me aan.
‫Perfect.
‫Samenvattend hebben we de torenklasse gemaakt.
‫We hebben nu een vijand voor de tank.
‫We hebben ook de toren van de toren in de richting van de tank gedraaid in de tick-functie en we doen dit alleen
‫als de tank in vuurbereik is.
‫We hebben ook de variabele brandbereik blootgelegd zodat deze in de blauwdruk kan worden aangepast.
‫We zijn bijna klaar voor de strijd.
‫In de komende video's gaan we dat instellen.
‫Ik zie je snel.