‫Hoi.
‫Welkom terug.
‫Nu hebben we al een basis gemaakt -- C++ klasse.
‫In deze video gaan we van die klasse afleiden om een nieuwe onderliggende klasse te maken op basis van base --.
‫Dus laten we bespreken waarom we zoiets zouden willen doen.
‫Dus we hebben deze basis -- klasse en we weten dat we twee verschillende klassen zullen hebben die afgeleid zijn van
‫basis --.
‫We krijgen onze tank en we krijgen de toren.
‫Nu bevat de basis mazen, een capsule en een spawnpunt.
‫En dit zijn dingen die de Tank en de toren beide kunnen erven.
‫Maar de tank en toren zullen ook een aantal functies hebben die van elkaar verschillen.
‫Ten eerste gaat onze tank over de wereld bewegen en wordt hij ook bestuurd door de
‫speler.
‫Het moet dus worden geconfigureerd om invoer van het toetsenbord en de muis te krijgen.
‫De toren, aan de andere kant, gaat daar gewoon zitten.
‫Het heeft geen input van de speler nodig, omdat zijn acties allemaal worden bestuurd door code.
‫Dus omdat de tank en toren zich anders zullen gedragen, gaan we gebruik maken van overerving om onderliggende klassen
‫van basis te maken -- zodat we kunnen erven wat ze gemeen hebben en dan aan elke klasse die kenmerken toevoegen
‫die anders zullen zijn.
‫Dus we zijn terug hier in de editor en ik ga naar onze C++ klassen, Tune Tank's map waar
‫we onze base -- class hebben en dit zal de class zijn waar we uit voortkomen.
‫Nu kunnen we hier met de rechtermuisknop klikken en C++-klasse maken die is afgeleid van base -- selecteren.
‫Dus laten we dat kiezen en ik ga het toestaan om deze klasse in dezelfde source slash tune tanks-map
‫te plaatsen als base --.
‫En voor de naam hiervan, noem ik het tank.
‫Dus onze tankklasse zal de klasse zijn voor onze eigenlijke tank -- die we controleren en ons verplaatsen in
‫de wereld.
‫Dus laten we klikken op klasse maken.
‫Oké, dus we hebben gecompileerd en vs-code is geopend met ons nieuwe tankbestand en we hebben ook Tank CP.
‫Nu zijn deze vrij kaal.
‫Er is hier echt niets, maar hoewel we ze niet kunnen zien, hebben we enkele dingen geërfd
‫van de basisklasse.
‫We hebben die componenten die we hebben toegevoegd aan base --.
‫Ook al zijn dit privévariabelen, ze bestaan nog steeds in deze klasse.
‫Dus nu we onze tankklasse hebben gemaakt, laten we het over een paar dingen hebben.
‫De tank zal nodig hebben dat de toren niet.
‫Omdat we de tank gaan besturen, hebben we een manier nodig om ons op de tank te concentreren
‫terwijl deze door het level rolt.
‫Op deze foto is dit een cameracomponent.
‫Het is de C++-klasse, je cameracomponent.
‫En deze rode lijn hier wordt een veerarmcomponent genoemd en de C++-klasse is je veerarmcomponent.
‫Door deze componenten toe te voegen aan een -- kunnen we de -- bekijken vanuit het oogpunt van de camera.
‫En als de camera en zijn veerarm op de een of andere manier aan de - op de een of andere manier zijn bevestigd, zullen ze de - over
‫de hele wereld volgen.
‫Nu, hier in de editor, als we teruggaan naar onze --'s map en BP -- tank openen, kunnen we op de
‫viewport klikken zodat we alles kunnen zien.
‫En dan kunnen we de capsule-comp selecteren en op toevoegen klikken en veerarm selecteren.
‫Dit is een veerarmcomponent.
‫Het lijkt op een rode lijn.
‫Nu onze veerarmcomponent is geselecteerd, kunnen we nog een component toevoegen en camera kiezen.
‫Nu we de camera hebben toegevoegd die aan de veerarm is bevestigd, hebben we nu een manier om vanuit
‫het oogpunt van de camera te kijken zodra we de --.
‫Nu is de veerarm best handig.
‫Het heeft deze lengte van de doelarm en als je het aanpast, zul je zien dat de camera zich samen met de
‫veerarm aanpast.
‫Dit is dus een manier om te bepalen hoe ver de camera verwijderd is van de --.
‫Dit zijn dus zeker dingen die we willen in onze ---klasse, maar we gaan ze toevoegen vanaf de
‫C++-kant in plaats van ze gewoon hier in de blauwdruk toe te voegen.
‫Die ga ik dus verwijderen.
‫Dus voor je uitdaging wil ik dat je wat dingen toevoegt aan de tankklasse.
‫Ten eerste hebben we een veerarmcomponent en een cameracomponent nodig, dus maak deze variabelen en maak
‫ze aanwijzers.
‫Ga je gang en maak een openbaar en een privégedeelte en plaats deze variabelen in het privégedeelte.
‫Nu hebben we dit nodig als U-eigenschappen, dus geef ze eigenschapmacro's en vul die macro's in met de juiste
‫specificaties op basis van wat je in de vorige lezingen hebt geleerd.
‫Nadat u deze variabelen hebt gemaakt, maakt u een constructor en plaatst u deze in
‫de openbare sectie en definieert u deze in het CP-bestand, en bouwt u vervolgens in de constructor onze camera- en veerarmcomponenten
‫met behulp van het standaardsubobject Create.
‫Zorg ervoor dat u de installatiebijlage gebruikt om deze componenten ergens aan te bevestigen.
‫We willen graag dat onze veerarmcomponent aan de wortelcomponent wordt bevestigd.
‫Gebruik dus root-component en set setup-bevestiging en bevestig deze voor de camera aan de veerarm.
‫U kunt terugverwijzen naar de basis -- class.
‫A Herinner uzelf eraan hoe de code eruitziet om deze dingen te doen.
‫Ga je gang en pauzeer de video en voeg deze dingen toe aan de tankklasse.
‫Oke.
‫Dus we zijn hier in Tank.
‫Nu, de eerste dingen eerst.
‫Ik wil graag een openbaar gedeelte en een privé gedeelte.
‫Dus het privégedeelte zal zijn waar we deze twee nieuwe componenten toevoegen.
‫We willen een U-veerarmcomponent, die een aanwijzer zal zijn, en we kunnen deze veerarm noemen.
‫En we hebben ook een nieuwe cameracomponent nodig en we zullen deze camera noemen.
‫Dat is goed.
‫Als uw namen iets anders zijn.
‫Nu zie ik meteen de IntelliSense-fouten hier, wat betekent dat ik deze
‫moet doorsturen.
‫Dus ik ga klas met veerarm en klas met camera gebruiken.
‫En nu zijn deze voorwaarts gedeclareerd.
‫Nu hebben we onze nieuwe eigendommen nodig.
‫Laten we dus de nieuwe eigenschapsmacro's toevoegen.
‫En binnen de eigenschapmacro willen we enkele specificaties hebben.
‫Deze zullen overal zichtbaar zijn, omdat we hebben gezien dat de componenten overal zichtbaar moeten zijn zodat
‫we hun parameters in het detailpaneel kunnen aanpassen.
‫Nu zie ik geen onmiddellijke noodzaak voor blootstelling aan de gebeurtenisgrafiek, dus ik denk niet dat we blauwdruk nodig hebben om te
‫lezen, te schrijven of alleen te lezen.
‫Dat is goed.
‫Als je ze hebt toegevoegd, laat ik ze nu weg.
‫Ik ga deze een categorie geven.
‫En aangezien dit componenten zijn, plaats ik ze gewoon in onze componentencategorie, samen met onze
‫andere componenten.
‫Nu stel ik deze niet bloot aan de gebeurtenisgrafiek, dus ik heb onze meta niet nodig om privétoegang toe te staan die hier wordt
‫gespecificeerd.
‫Dus dit is genoeg voor de veerarm en ik zou het camera-onderdeel graag dezelfde eigendom willen geven.
‫Dus ik kopieer het.
‫Dus nu hebben we onze componenten.
‫Het volgende dat we moeten doen, is ze in de constructor te construeren, wat betekent dat we een constructor nodig hebben.
‫Nu zal de constructor dezelfde naam hebben als de klasse, dus het is een tank en we moeten deze constructor in
‫het CP-bestand definiëren.
‫Dus laten we naar Tank CP gaan en een tank maken.
‫Dus er is onze functie-body en de tankconstructor moet worden voorafgegaan door onze klassenaam
‫en de scope-resolutie-operator.
‫Dat zijn deze dubbele dubbele punten hier.
‫Op die manier maken we niet alleen een nieuwe functie, maar definiëren we onze constructor voor deze klasse.
‫Nu willen we deze componenten construeren.
‫Dus laten we beginnen met de veerarm.
‫Dus we gaan zeggen dat de veerarm gelijk is aan het maken van een standaard subobject en dit zal een u-veerarmcomponent zijn.
‫En voor de tekst noem ik deze veerarm gewoon.
‫En voor de bevestiging gaan we de veerarm instellen, de bevestiging opzetten, de wortelcomponent doorgeven.
‫Nutsvoorzieningen.
‫Ik zat erop te wachten.
‫Daar is het.
‫De IntelliSense-foutmelding wijst naar een onvolledig klassetype met veerarmcomponent.
‫Dat komt omdat we het headerbestand moeten opnemen omdat we een veerarmcomponent maken en gebruiken.
‫Dus hier is mijn onwerkelijke motordocumentatie en als ik naar beneden scrol, is daar mijn include.
‫Dus ik ga dat kopiëren en hier bovenaan plakken, net onder de tankrand.
‫Nu, een kanttekening in het algemeen, je houdt je klasse-headerbestand bovenaan
‫en bevat voor je componenten daaronder.
‫Dus we hebben onze veerarm.
‫Het is tijd om de camera te bouwen.
‫Dus we gaan zeggen dat camera een standaard subobject maakt, je cameracomponent.
‫En in de tekstmacro noem ik dit gewoon camera.
‫En voor de camera noem ik setup attachment passeren in veerarm.
‫En natuurlijk heb ik het cameraheaderbestand nodig.
‫Dus hier is de onwerkelijke motordocumentatie en hier waar het zoekdocumentatie
‫zegt, ik ga je cameracomponent typen en hier zie ik je cameracomponent.
‫Ik zal dat selecteren.
‫En hier is de documentatie voor de cameracomponent.
‫Dus ik zal het kopiëren om het hier bovenaan ons bestand te plakken.
‫En nu zouden we goed moeten zijn.
‫Oké, dus laten we doorgaan en dit compileren.
‫Oké.
‫Dus ik heb een succesvolle compilatie.
‫Laten we teruggaan naar de editor en hier verder -- Tank.
‫Natuurlijk zien we niets omdat -- tank is afgeleid van basis -- en de componenten die we zojuist hebben
‫toegevoegd, we hebben toegevoegd aan de tankklasse.
‫Dus BP -- tank zal die niet krijgen omdat het niet afgeleid is van de tankklasse.
‫Nu zouden we een nieuwe blauwdruk kunnen maken op basis van de tankklasse, maar dan zouden we deze
‫componenten helemaal opnieuw moeten instellen.
‫En ik heb niet echt zin om al dat werk een tweede keer te doen.
‫Er is een makkelijkere manier om deze blauwdruk te repareren naar de tankklasse.
‫We doen dat door naar de klasinstellingen te gaan en in het detailvenster met de klasinstellingen geselecteerd,
‫zien we klasopties en er is deze bovenliggende klas.
‫De vervolgkeuzelijst laat zien dat het is ingesteld om op te baseren, maar als we erop klikken, kunnen we naar
‫tank zoeken en tank als de basisklasse kiezen.
‫En nu is deze blauwdruk afgeleid van de tankklasse.
‫Dus we zien dat al die eigenschappen die we instellen met onze componenten, zoals de mesh en de capsulegrootte,
‫er allemaal nog zijn.
‫Pas nu zien we een camera.
‫In feite hebben we een veerarm en een camera.
‫En als we nu de veerarm selecteren, kunnen we die rode lijn zien.
‫Dit is dus geweldig.
‫Dus ik zou dit veerarmonderdeel kunnen nemen en de lengte van de doelarm kunnen veranderen.
‫Als ik wil, kan ik het instellen op ongeveer 600 en ik kan zelfs de rotatie ervan veranderen, zodat het de camera
‫naar de tank kantelt door de rotatiemodus te selecteren en het een beetje omhoog te draaien.
‫Zoals Dus nu wil ik je erop wijzen dat je de locatie van de camera niet moet veranderen.
‫Het kan verleidelijk zijn om de camera te selecteren en deze in de wereld te verplaatsen, zodat u hem precies goed positioneert en
‫in een goede hoek plaatst.
‫Maar dit is niet de juiste manier om het te doen.
‫De juiste manier is om de rotatie en de lengte van de doelarm van het veerarmonderdeel in te stellen.
‫En de reden is dat je die camera aan het uiteinde van de veerarm wilt bevestigen.
‫De veerarm heeft veel verschillende ingebouwde functies, zoals het inkrimpen wanneer de camera tegen een
‫muur slaat om obstakels te vermijden, het zicht op de vijver te blokkeren en andere dergelijke dingen.
‫U wilt dus dat de camera aan het uiteinde van de veerarm wordt bevestigd en vervolgens de veerarm
‫afstelt in plaats van de positie en rotatie van de camera aan te passen.
‫Dus in deze video hebben we de tankklasse gemaakt en we zijn afgeleid van de basisvijver om die kwaliteiten
‫van de basisvijverklasse te erven.
‫We hebben een veerarmcomponent en een cameracomponent toegevoegd en deze aan de editor blootgesteld met alleen zichtbaar en
‫in hun eigen categorie geplaatst.
‫Zo komen we stap voor stap dichter bij het eindproduct en in de volgende lezing gaan we deze
‫tank verder ontwikkelen.
‫Ik zie je snel.