‫Hoi.
‫Welkom terug.
‫We zijn klaar om ons spel af te maken, wat betekent dat er nog maar een paar dingen moeten gebeuren om ons spel op
‫te poetsen en het in een staat te krijgen waar we blij mee zijn.
‫Dus maak je klaar om dit spel af te maken.
‫We zijn bijna klaar.
‫We gaan gewoon een paar functies toevoegen.
‫Ik zou de camerabeweging wat soepeler willen maken, dus daar gaan we mee beginnen.
‫Ik heb ook gemerkt dat de torens nog steeds projectielen afvuren nadat de tank dood is, dus we kunnen de
‫code gemakkelijk repareren om te voorkomen dat dit gebeurt.
‫En ik ga ook een mogelijk probleem bezoeken met het spawn-punt van het projectiel.
‫Dus laten we erin springen en dit spel oppoetsen.
‫Het eerste waar ik naar wil kijken is de camerabeweging.
‫Dus als ik doorga en op play druk, zal ik je laten zien wat ik bedoel.
‫Terwijl ik rondloop, zul je zien dat de camera precies onze beweging volgt als we draaien en als
‫we vooruit en achteruit gaan, volgt de camera gewoon automatisch mee.
‫Nu is er een leuke truc die we aan deze camera kunnen toevoegen die hem een beetje soepeler kan maken.
‫Laten we doorgaan en de BP-vijvertank openen.
‫Nu hier in BP Pond Tank, ga ik onze veerarmcomponent selecteren.
‫En als ik zoek naar cameravertraging, zie ik hier in het gedeelte vertraging dat er een selectievakje is om cameravertraging in
‫te schakelen.
‫Ik ga dat controleren en de rotatievertraging van de camera inschakelen.
‫Dat ga ik ook checken.
‫Dit stelt ons in staat om de camera achter te laten en soepel in te halen, wat een
‫mooi soort professioneel camera-effect creëert.
‫Laten we doorgaan en op play drukken en dit uitproberen.
‫Dus merk op dat als ik beweeg, de camera een korte tijd nodig heeft om in te halen terwijl we bewegen.
‫En hetzelfde geldt voor als we draaien.
‫Dus het is alsof er een beetje traagheid is en de camera zich op een soort glijdende baan bevindt en het vertraagt
‫tot stilstand.
‫Nu kunnen we de veerarm selecteren en kunnen we de vertragingssnelheid van de camera en de vertragingssnelheid van de rotatie wijzigen.
‫Als ik dit bijvoorbeeld op een kleinere waarde plaats, zeg vijf en vijf in plaats van tien, laten we nu eens kijken
‫hoe het eruit ziet.
‫Dus ik beweeg en je zult zien dat de camera wat meer vertraging heeft.
‫Nu kunnen we dit naar eigen goeddunken verhogen of verlagen.
‫Dit is iets waarmee u kunt experimenteren en de waarden kunt vinden die voor u werken.
‫Hier hebben we een waarde van twee en voor mij is dat een beetje te veel vertraging.
‫Dus ik denk dat iets tussen vijf en twee voor mij zou werken.
‫Als je van dit soort waarde houdt, houd je het misschien op twee of misschien zelfs lager.
‫Maar ik ga dit op een waarde zetten van, laten we zeggen, vier voor de vertragingssnelheid van de camera en vier voor de vertragingssnelheid van de rotatie
‫van de camera.
‫Laten we eens kijken hoe dat eruit ziet.
‫Dus terwijl ik beweeg, blijft de camera achter.
‫Er is duidelijk wat cameravertraging, maar het is niet te veel.
‫Ik vind dit er eigenlijk best goed uitzien, dus daar ben ik best tevreden mee.
‫Ons volgende item is de toren die afvuurt nadat de tank al dood is.
‫Laat me gewoon doorgaan en je laten zien wat ik bedoel.
‫Daar gaan we.
‫De tank is dood en de torens vuren nog steeds.
‫Dit komt omdat de tank nog steeds bestaat.
‫En zolang het binnen vuurbereik is, zullen de torens blijven vuren.
‫Dit wordt gemakkelijk afgehandeld door een soort variabele te hebben die we kunnen controleren om te zien of de tank is overleden.
‫Dus ik ga hier naar de tankklasse en tank, en ik ga een Booleaanse variabele toevoegen die we kunnen controleren
‫om te zien of de tank nog leeft.
‫En ik ga dit openbaar maken omdat we van plan zijn het van buiten de klas te gebruiken.
‫Dus ik ga hier een bull-variabele van maken met de naam Be Alive, en ik ga het standaard gelijk stellen
‫aan true.
‫Dus de tank begint in de levende staat en als de tank sterft, wordt levend ingesteld op onwaar.
‫En dat kan gebeuren in tank CP bij handvatvernietiging.
‫Dus laten we de vernietiging hier gaan aanpakken.
‫En nadat we deze andere eigenschappen hebben ingesteld, ga ik B levend gelijk stellen aan false.
‫Dus aangezien we B levend op false zetten, kunnen we weten of de tank dood is en dan kunnen we simpelweg voorkomen
‫dat de projectielen worden afgevuurd door deze boolean te controleren.
‫Dus laten we naar Tower Dot gaan, CP en hier in controlebrandtoestand.
‫We kunnen ervoor zorgen dat de tank nog in leven is voordat we schieten.
‫Dus eerst ga ik kijken of de tank geldig is.
‫Ik ga zeggen dat als tank gelijk is aan null pointer, dan kom ik gewoon eerder terug.
‫Op die manier weten we dat Tank geldig is en dan in onze controle om te zien of we binnen
‫vuurbereik zijn, ga ik een toevoegen en kijken of Tank nog leeft.
‫Als tank.
‫leeft, dan kunnen we vuren.
‫Als Tank niet leeft, zullen we niet vuren.
‫Nu vraag je je misschien af of het wel of niet een goed idee is om de return op een enkele regel te zetten, zoals je
‫me in eerdere video's hebt zien doen.
‫En dit is een goede gelegenheid om Unreal Engines, beste programmeerpraktijken en aanbevelingen te bespreken.
‫Unreal engine coding-praktijken raden je aan om accolades met een hoofdtekst te gebruiken voor al je
‫if-statements, zelfs die met één statement.
‫En de reden is dat als je van plan bent hier meerdere regels code aan toe te voegen, je de body
‫hier al hebt.
‫En het is ook duidelijker.
‫En dat brengt me ook op een ander punt, namelijk mijn gebruik van auto.
‫Ik heb hier een paar keer auto gebruikt in de projectielklasse, en hoewel dit efficiënt kan zijn,
‫is het op het eerste gezicht niet zo duidelijk wat de typen zijn, daarom wordt het gebruik van auto ook
‫niet aanbevolen bij onwerkelijke motorcoderingspraktijken.
‫Als u zich wilt houden aan de door Unreal Engine aanbevolen coderingspraktijken, kunt u deze instanties van auto
‫vervangen door het werkelijke type.
‫Hier, bijvoorbeeld, get instigator controller retourneert een A-controller, zodat we dat kunnen veranderen in een controller en dat
‫is een aanwijzer.
‫Deze statische klasse, die je beschadigt, retourneert een U-klasse, zodat we je klasse hier kunnen gebruiken en natuurlijk krijgt de eigenaar hier een
‫acteur terug, zodat we hier en nu een acteur kunnen gebruiken in plaats van auto. Als je naar deze code kijkt, is het veel
‫duidelijker wat deze typen zijn, terwijl auto gewoon alles maskeert en je in staat stelt lui te zijn
‫en weg te komen door de typen niet te typen.
‫Soms weet ik niet zeker wat een grote uitdrukking teruggeeft, dus ik gebruik auto om te zien wat dat
‫type is en later zal ik het vervangen door het daadwerkelijke type.
‫Dus dat is een andere manier waarop u auto kunt gebruiken om u te helpen de typen te leren die terugkeren door lange, gecompliceerde uitdrukkingen
‫zoals deze.
‫Dus aangezien we ons in de oppoetsfase bevinden, ga ik auto vervangen door de echte typenamen
‫hier in projectiel.
‫Ik ga ook naar de basispion in de vuurfunctie waar we dit projectiel hebben en dit wordt teruggegeven van
‫deze grote lange uitdrukking hier.
‫Spawn-acteur gaat in dit geval een projectiel teruggeven, zodat ik dit kan vervangen door een projectiel.
‫Oké.
‫Dus dat gaat de code aan de C++-kant oppoetsen.
‫Laten we doorgaan en dit compileren.
‫En met een geslaagde compilatie gaan we terug naar de editor en gaan we op play drukken en
‫ervoor zorgen dat die torens niet meer op ons schieten nadat we zijn gestorven.
‫Er is dus één treffer.
‫Er is er nog een, en ik wacht, en ik zie geen projectielen meer.
‫Perfect.
‫Oké.
‫Dus het laatste punt dat ik wil bespreken voordat we dit afronden, is het spawn-punt van het projectiel.
‫Laten we dat nu hier in BP Pond Tank selecteren en ervoor zorgen dat het ver genoeg van het vat verwijderd
‫is.
‫Voordat we dat doen, ga ik het heel, heel dichtbij plaatsen en je enkele problemen laten zien
‫die zich kunnen voordoen.
‫Nu, terwijl ik vooruit ga en op de linkermuisknop klik, zul je zien dat ik het projectiel niet zie.
‫Sterker nog, ik zie het helemaal niet omdat het gewoon te dichtbij is.
‫We krijgen al een aanrijding.
‫Het wordt vernietigd voordat het iets kan doen.
‫Zorg er dus voor dat het een flink stuk uit de buurt van het vat is.
‫We produceren hoe dan ook wat rook, dus het zal lijken alsof er een rookspoor achter loopt.
‫Dit ziet er dus nog redelijk realistisch uit.
‫Dus dat ziet er best goed uit.
‫En terwijl we op projectiel-spawn-punten zijn, is het misschien een goed idee om naar de BP-vijvertoren te
‫gaan kijken en het projectiel-spawn-punt te selecteren.
‫En als je problemen hebt gehad met het spawnen van projectielen uit het torentje, wil
‫je er misschien ook voor zorgen dat het zich op een goede afstand van de loop van het torentje bevindt.
‫Dus daar hebben we het.
‫We hebben een functioneel spel en het ziet er fantastisch uit.
‫We hebben de mogelijkheid om rond te rollen in de wereld, we hebben de mogelijkheid om projectielen af te schieten en
‫ze blazen dingen op.
‫Als we een toren raken, kunnen we hem vernietigen.
‫Als de toren ons raakt, kan hij ons vernietigen.
‫Gewoon zo.
‫En we hebben voorwaarden voor winnen en verliezen met HUD-widgets die op het scherm worden weergegeven en ons vertellen of we
‫de game hebben gewonnen of verloren.
‫Dit is dus fantastisch.
‫En als je deze game wilt verpakken, kun je dat eenvoudig doen door naar boven te
‫gaan en op het platformpictogram te klikken voor Windows, als je een Windows-computer gebruikt of voor iOS, als je een Mac
‫gebruikt. machine, dan heb je natuurlijk deze andere opties.
‫Als je voor andere platforms wilt verpakken, raad ik je aan wat online onderzoek te doen om de verschillende platforms op
‫te zoeken en hoe je daarvoor kunt verpakken.
‫Ik ben op een Windows-machine, dus ik kan hier eenvoudig op pakketproject voor Windows klikken en het zal me
‫vragen waar ik mijn spel wil verpakken.
‫Nu heb ik mijn project hier in Tune Tanks.
‫Ik ga met de rechtermuisknop klikken, een nieuwe map maken en ik ga deze build gewoon noemen.
‫Dat is meestal waar u een verpakt project zou plaatsen.
‫Dus ik ga die map selecteren en Unreal Engine toestaan mijn spel in te pakken.
‫Het zal waarschijnlijk een paar minuten duren en als het klaar is, zou ik een verpakt spel moeten hebben.
‫Oké.
‫Dus als ik klaar ben met inpakken, zouden we de build succesvol moeten zien in het uitvoerlogboek en dan kunnen we
‫kijken in de map die we hebben aangewezen voor ons verpakte project.
‫Voor mij wordt het deze buildmap.
‫Nu heb ik vier vensters verpakt, dus ik heb een Windows-map en hier is mijn tune tanks, dot xy.
‫Het is een uitvoerbaar bestand.
‫Ik kan erop dubbelklikken en hier is mijn eindproject.
‫Ik kan schieten.
‫Ik kan ontwijken.
‫Het lijkt erop dat mijn vijandelijke torens op mij kunnen schieten en ik ze kan vernietigen.
‫Ja, ik kan ze vernietigen.
‫Ze kunnen me vernietigen, zo lijkt het, en ik kan het spel verliezen.
‫En natuurlijk, als ik wat vaardiger was, zou ik de wedstrijd kunnen winnen.
‫En voor je laatste uitdaging ga ik je de opdracht geven om je eigen smaak aan het spel toe te voegen.
‫Maak dit spel je eigen.
‫Vind wat nieuwe geluiden of effecten of meshes en creëer funky uitziende torens en tanks.
‫Voeg meer torens toe, voeg misschien verschillende vaardigheidsniveaus toe, maak de torens steeds moeilijker naarmate je verder komt
‫in je level.
‫Misschien kan je de tank een hoger niveau geven, een niveau geven dat je kunt verhogen naarmate je meer en meer torens vernietigt.
‫Misschien kun je een nieuwe niveaugeometrie toevoegen en de tank op hellingen laten klimmen en tanks proberen te vernietigen op
‫moeilijk bereikbare plaatsen.
‫De mogelijkheden zijn eindeloos, maar vooral: veel plezier.
‫Terwijl je je games ontwikkelt.
‫Je gaat de video niet pauzeren voor deze uitdaging.
‫Dit is iets dat je vanaf dit punt kunt doen met je gameprojecten.
‫Gefeliciteerd dus.
‫We eindigden ons spel.
‫Ik hoop dat je genoten hebt van deze sectie.
‫Ik had een hoop plezier.
‫Dit is een geweldig spelproject en je hebt een lange weg afgelegd.
‫Je hebt tijdens dit gedeelte van de cursus een heleboel vaardigheden geleerd, dus ik hoop dat je klaar bent om
‫door te gaan naar meer opwindende dingen.
‫Heel erg bedankt.
‫Ik ben Steven en ik zie je snel.