‫Hallo en welkom.
‫Deze lezing gaan we een los scherm weergeven en ik ga het volledig
‫vanuit C++ doen om die widget te spawnen.
‫Laten we erin duiken en kijken hoe het gedaan is.
‫Oké, dus we willen graag een gebruikersinterface weergeven wanneer een speler sterft om hen te vertellen wat er aan de hand is dat ze hebben verloren en
‫dat het niveau op het punt staat te worden gereset.
‫Voor hen komt het dus niet als een verrassing.
‫We hoeven dus geen UI, UI-widgets, UMG, onwerkelijke bewegende grafische widgets te maken.
‫Dus laten we dat allereerst doen door een map te maken om de gebruikersinterface op te slaan.
‫En ik weet al dat we twee UI-items zullen hebben, dus ik denk dat ik hier een UI-map zal hebben en laten
‫we dan hier naar binnen gaan en rechtsklikken en dan gaan, je had dit eerder moeten doen, maar laten we ik' zal je
‫er doorheen leiden.
‫We gaan naar het gedeelte met de gebruikersinterface, selecteren vervolgens de widgets-blauwdruk en het voorvoegsel
‫om te gaan gebruiken is WB P-underscore en dan wordt het het losse scherm.
‫Nu kun je een aantal basisklassen voor dit soort dingen doen in C++, maar dat gaan we in deze sectie
‫niet behandelen.
‫Het is over het algemeen niet nodig om dat te doen, en het is veel gemakkelijker om de dingen in Blueprint te doen.
‫Het heeft niet veel voordelen om het in C++ te doen, tenzij je UI super ingewikkeld zou worden en je
‫een deel van die UI-logica in C++ wilde stoppen.
‫In ons geval is dit niet het geval, dus we kunnen gewoon doorgaan en de blauwdrukken gebruiken.
‫De gebruikersinterface is tenslotte een visueel iets.
‫Het is logisch om een visueel hulpmiddel te gebruiken om het nu samen te stellen, omdat u al weet hoe u
‫widgets maakt.
‫Dan ga ik je dit als uitdaging meegeven om een los scherm op te zetten.
‫We willen wat tekst toevoegen waarin wordt uitgelegd dat de speler heeft verloren en dat we op het punt staan opnieuw te beginnen.
‫Wil je die tekst waarschijnlijk centraal plaatsen, zichtbaar maken, zorg dat hij zichtbaar is in het spel.
‫En toch, zoals ik al zei, leg uit dat er een herstart op komst is.
‫En nadat je deze uitdaging hebt geprobeerd, gaan we kijken hoe we dit vanuit C++ kunnen voortbrengen.
‫Je hebt misschien gezien hoe je dit in Blueprint kunt doen voordat we gaan kijken hoe we dit vanuit C++ kunnen doen.
‫Dus pauzeer de video en laat hem gaan.
‫Oké, welkom terug.
‫Dus ik ga eerst een stukje tekst maken.
‫Dus ik wil in het palet links zoeken, ik ga op zoek naar het tekstitem en breng dat binnen.
‫Ik ga het veranderen om je te verliezen.
‫Vrij eenvoudige en fantasieloze dialogen die hier worden geschreven.
‫Ik ga de kleur en dekking en het uiterlijk veranderen in rood om het super duidelijk te maken dat ze verloren zijn
‫gegaan en wrijf het er gewoon een beetje meer in en ik ga dat lettertype uitbreiden en de grootte veranderen om groter te zijn
‫.
‫En dan ga ik het kader rond onze tekst uitbreiden en onze tekst centreren.
‫Dus wat betreft de rechtvaardiging, ik ga de tekst centraliseren.
‫En als ik uitbreid, laten we eens kijken of er ergens anders is waar ik het centrum kan doen uitgelijnd binnen dat er niet
‫is.
‫Dus ik ga gewoon de dozen ongeveer passend maken en dan ga ik naar mijn uitlijningen en mijn ankers en
‫dat soort dingen.
‫En ik ga de vervolgkeuzelijst voor ankers selecteren en de voorinstelling voor verankering in het midden selecteren, want dat is wat
‫ik wil doen.
‫Ik wil mijn uitlijning op 0 zetten. 5 en 0. 5, wat in feite betekent dat we uitlijnen op het
‫midden van het object in plaats van dat de linkerbovenhoek het anker opnieuw gaat doen.
‫Oké, dat niet, dat was niet erg behulpzaam.
‫En dan de positie X, waarom denk ik dat als ik de positie naast nul en nul zet omdat ik
‫mijn ankers zo heb opgesteld, mijn verliespositie ergens in het midden zal zijn en ik hem gewoon
‫ga verplaatsen een heel klein beetje omhoog.
‫Houd mijn positie X op nul, positie Y op -50, want ik wil wat secundaire tekst toevoegen die in feite zegt dat het misschien
‫gemakkelijker is om de andere tekst hier te dupliceren omdat het alle instellingen heeft die ik
‫al nodig heb.
‫Ik wil het alleen wat kleiner maken.
‫Positie nul opnieuw en ik ga zeggen dat het niveau over 5 seconden opnieuw zal starten en ik ga die lettergrootte veel
‫kleiner maken.
‫Dus het is minder in je gezicht, zoiets als dit, en beweeg het dan gewoon een klein
‫beetje naar beneden, een kleine inkeping en blijf die positie X resetten naar nul en 100% tevreden met de positionering.
‫Ik ga het alleen nog een tandje hoger zetten.
‫Als ik shift ingedrukt houd, kan ik het vergrendelen op de as waarmee ik beweeg, zodat het min of meer centraal
‫staat.
‫Oké, daar ben ik dus blij mee.
‫Nu moeten we doorgaan en proberen het ding te spawnen.
‫Hoe gaan we dat doen?
‫Allereerst moeten we weten welke widgetklasse we zouden moeten uitzetten, en we moeten weten waar
‫we het vanaf nu gaan doen.
‫Zoals ik al zei, denk ik dat een goede plek om dit te doen de spelercontroller zelf is.
‫En we moeten in de spelercontroller weten welke klasse, welke widgetklasse we proberen te spawnen?
‫Nu, ik weet dat het een blauwdrukklasse is, maar we hebben het nog steeds nodig om een klasse te zijn die we proberen te spawnen.
‫Dus de manier waarop we dit gaan doen is om hier een nieuw pand te creëren.
‫Er zullen overal bewerkingen zijn en we willen dat dit een subklasse is, omdat dit altijd een goede manier is om
‫ervoor te zorgen dat we een nieuwe klasse krijgen.
‫In principe zou je het type nieuwe klasse kunnen gebruiken als je dat zou willen, maar dat beperkt niet wat voor soort klasse
‫we kunnen gebruiken.
‫En hier willen we het beperken tot alleen het feit dat u widgets gebruikt.
‫Als je naar je blauwdruk gaat, kun je zien of we hier ergens naar toe gaan, je kunt zien of ze een bovenliggende klasse is
‫die een widget gebruikt waarvan we weten dat wanneer je het voorvoegsel erop zet, je een widget gebruikt.
‫Dit is dus een subklasse van.
‫En dan gebruiken we onze punthaken, je gebruikt een widget en ik ga die hier echt verklaren in
‫plaats van er een in te voegen.
‫En dus klasse gebruik je een widget en dan gaan we dit de loss screen-klasse noemen.
‫Houd het gewoon heel duidelijk wat daar aan de hand is.
‫Nu ga ik in dit stadium verder met compileren terwijl we de volgende dingen doen, omdat het compileren bij het wijzigen van
‫een bestand net iets langer duurt.
‫Nu zal het compileren in dit stadium mislukken omdat we de UMG-module niet hebben opgenomen.
‫We weten niet hoe we dat moeten doen.
‫Maak je in dit stadium geen zorgen over de compilatie en na ongeveer 9 minuten in de video zullen we deze
‫fout oplossen.
‫Nu in de C ++, wat we willen doen, is die widget daadwerkelijk voortbrengen.
‫Dus we willen het misschien zelfs niet voor die tijd doen.
‫Het maakt niet echt uit, want de timer wacht niet.
‫Het stelt gewoon de tijd in en gaat dan meteen door naar de volgende regel code, dus we hoeven geen 5 seconden te wachten
‫als we dit bij Stripe deden, als we de gebruikersinterface direct daarna hebben voortgebracht, maakte niet echt uit in welke volgorde we
‫doe dit erin.
‫Dus wat we willen doen, is een functie gebruiken met de naam widget maken, die momenteel niet beschikbaar is.
‫Dus we moeten eerst iets hashen en we gaan een blueprint forward slash gebruiken om een widget te
‫gebruiken.
‫En dat is een klasse die we nodig hebben om toegang te krijgen tot deze functie voor het maken van widgets.
‫En we gaan eigenlijk zeggen widget maken.
‫Het moet goed zijn, laten we eens kijken wat we ervoor nodig hebben.
‫Ik ga f 12 naar de uitvoering ervan.
‫Je kunt zien dat het een beetje ingewikkeld is om te zien, maar we hebben hier wel een sjabloonparameter die in feite standaard
‫is dat je een widget gebruikt, dus die hoeven we waarschijnlijk niet te verstrekken.
‫En dan is er nog het eigendomsobject en de klasse die we moeten maken en dan een widgetnaam die we niet per
‫se hoeven te verstrekken.
‫En dan keert het terug als de aanwijzer naar de widget.
‫Dus wat ik eigenlijk ga doen is hier, we gaan het een eigenaarsobject geven.
‫Nu kunnen alleen bepaalde dingen de widget bezitten.
‫Een van die dingen is eigenlijk de spelercontroller.
‫Hier kunnen we dus gewoon in.
‫En het volgende is dat we willen doorgeven in de t-subklasse van je gebruik een widget.
‫Gelukkig hebben we dat al in het hoofd van het bestand geconfigureerd.
‫Dus we kunnen gewoon doorgaan en dat doorgeven en ik zal voorkomen dat mijn inspringing zichzelf probeert op te lossen terwijl ik geen puntkomma aan het
‫einde van de regel heb gezet.
‫En laten we dan gaan kijken naar wat nog meer.
‫Nou, dat is het dan.
‫Het retourneert gewoon de widget op dit punt.
‫Dus wat we kunnen doen is een verwijzing naar je hebben, een widgetwinkel gebruiken en dit wordt ons verliesscherm.
‫Dus we moeten schermklasse verliezen.
‫Nadat we de widget hebben gemaakt, wordt het een echt los scherm.
‫Het volgende dat we moeten doen, is deze gebruikersinterface zichtbaar maken.
‫Dat doen we door het in onwerkelijk spraakgebruik toe te voegen aan de viewport.
‫Maar eerst, omdat we aan de viewport toevoegen door een functie op het blauwe scherm aan te roepen, moeten we ervoor
‫zorgen dat het geen null-aanwijzer is.
‫Dus als schermverlies niet gelijk is aan nulaanwijzer, waarom zou het dan geen punten zijn?
‫Trouwens, kleine uitdaging voor jou.
‫Kijk of je erachter kunt komen waarom we hier een nulaanwijzer krijgen.
‫Een van de redenen is dat we misschien zijn vergeten de klasse voor schermverlies in te stellen.
‫En als dat het geval is en we hebben geen geldige klassenset voor blauw scherm, dan zal widget maken
‫gewoon een null-aanwijzer voor ons retourneren.
‫En we willen niet dat dat gebeurt en we willen zeker niet een functie aanroepen op een null-pointer.
‫Dat geldt ook voor de blauwe schermpijl.
‫En dan willen we hier een functie genaamd toevoegen aan viewport.
‫Die dat gewoon gaat doen.
‫Ga en voeg het toe aan het scherm zodat we dat blauwe scherm kunnen zien.
‫Nu ga ik door en compileer dat ook, en ga naar Unreal en open
‫onze blauwdruk voor de spelercontroller.
‫Dus schiet hier een afspeelcontroller en we zouden hier ergens moeten kunnen kijken.
‫En er is nog geen variabele opgedoken.
‫Misschien had ik wat bouwgebieden.
‫Laten we het berichtenlogboek bekijken.
‫Ja, we kunnen hier een paar bouwfouten zien, namelijk deze rare over het ontbreken van externe symbolen.
‫Als we een beetje kijken en dingen over jou zeggen, gebruik dan een widget die niet beschikbaar is.
‫Als je nu terugdenkt aan een paar lezingen eerder, weten we dat dit soort fouten meestal
‫optreden wanneer we een module-afhankelijkheid missen.
‫Dus als we onze eenvoudige shooter-builddocumenten gaan openen en ik ga gewoon de terminal sluiten voor wat meer extra ruimte,
‫dan kun je zien wat we moeten doen door hier een nieuwe openbare afhankelijkheid toe te voegen.
‫Dus aan het einde hiervan gaan we een openbare afhankelijkheid voor UMG toevoegen.
‫Dus een nieuwe komma en dan tussen aanhalingstekens gaan UMG zetten.
‫En dat stelt ons in feite in staat om gebruik te maken van de include die we hier hadden, de blueprint forward slash
‫use-widget.
‫Al dat spul zit in een aparte module.
‫Dus de standaard dingen die erbij zitten.
‫We moeten dus gaan onthullen dat we die module in C++ willen gebruiken.
‫Laten we doorgaan en bouwen en kijken of het nu werkt.
‫Oké.
‫Dat ziet er geslaagd uit.
‫Als we naar de editor gaan en teruggaan om een play-controller te schieten.
‫Om de een of andere reden denk ik dat ik niet goed herlaad, dus ik moest hier in de editor op compileren klikken.
‫We gaan nu terug naar de shooter-playcontroller.
‫Eindelijk kun je die losse schermklasse zien.
‫We kunnen daar op de vervolgkeuzelijst klikken en AWP selecteren, onderstrepen, scherm verliezen daar, compileren, opslaan en laten
‫we gaan en onszelf vermoorden.
‫Word een paar keer neergeschoten.
‫Bang, knal.
‫En daar ga je.
‫Er is een Alu-scherm verschenen dat ons vertelt wat er gebeurt, dat niveau staat op het punt om over 5 seconden opnieuw te starten,
‫en dat doet het inderdaad.
‫U weet nu dus niet alleen hoe u UMG-graphics kunt maken, maar ook hoe u deze vanuit C++ kunt spawnen in
‫plaats van vanuit Blueprint.
‫De volgende lezing zullen we een minder pessimistische kijk op de zaken hebben en proberen te
‫zien of we ook wat win-voorwaarden kunnen creëren voor dit spel.
‫Ik zie je dan.