‫Hallo en welkom.
‫In deze lezing gaan we leren hoe we een aanwijzing kunnen krijgen voor de eigendomshandeling van een component.
‫We gaan uitzoeken wat een aanwijzer is, welke adressen in het geheugen staan,
‫en we gaan ze ook afdrukken in onze logberichten.
‫Laten we erin duiken.
‫Laten we dus even de tijd nemen om een kernconcept te begrijpen van wat er gaande is in het programmeren in
‫het algemeen over variabele adressen.
‫Wat is een adres van een variabele?
‫Welnu, we slaan al onze variabelen op in het geheugen omdat er ram-chips op uw computer zijn en variabelen geheugen nodig hebben om
‫hun gegevens op te slaan.
‫Dus een getal met drijvende komma vereist 32 bits aan gegevens of 64, als het een dubbel geheel getal is, vereist een bepaalde
‫hoeveelheid geheugen.
‫Ook geldt: hoe groter de structs die je hebt of hoe groter de klassen die je hebt, zoals acteurs
‫kunnen erg groot zijn en veel gegevens omvatten, misschien heb je zelfs een paar kilobytes geheugen per acteur nodig, dat soort
‫dingen.
‫Welnu, dat geheugen moet ergens leven op dit grote veld van lege gegevens dat uw geheugenbanken zijn.
‫En die locatie staat bekend als een adres.
‫Dus hoe werkt dit in de praktijk?
‫Stel je voor dat we dit grote veld van nullen en enen hebben.
‫Dat zijn de gegevens op je ram.
‫Welnu, de variabele, een actor-variabele genaamd mijn acteur, moet een bepaalde locatie binnen dat geheugen hebben die is
‫toegewezen om de gegevens in de actor op te slaan.
‫Dus dit rode gedeelte van het geheugen kan zijn waar we de gegevens voor
‫deze ene bepaalde actor opslaan, en het heeft een adres dat gewoonlijk in binair of hexadecimaal wordt aangegeven, dat in wezen alleen de locatie is.
‫Als je begint met het aftellen van alle bytes, alle enen en nullen hier, dan tellen we eigenlijk niet de individuele
‫enen en nullen.
‫We tellen in stappen van acht, maar dat is niet zo belangrijk.
‫We tellen de bytes.
‫Dat is in wezen het adres waar we beginnen.
‫Over onze acteur gesproken.
‫En dan heeft elk type een bepaalde maat.
‫Dus we weten dat de acteur zoveel bytes aan gegevens nodig zou hebben.
‫En dat vertelt ons waar we de gegevens over onze specifieke acteur kunnen vinden.
‫Dus waarom is dit belangrijk?
‫Nou, laten we eens kijken naar de situatie waarin we misschien een kans willen maken.
‫Twee acteurs.
‫We hebben slechts twee variabelen die verwijzen naar dezelfde gegevens.
‫In het naïeve geval zouden we dit gewoon kopiëren.
‫Dus we hebben een stuk geheugen dat is toegewezen aan de my actor-variabele door een ander stuk geheugen dat is toegewezen aan
‫een lege variabele genaamd your actor, waaraan we nog niets hebben toegewezen.
‫En wat we dan willen doen, omdat we willen dat ze dezelfde gegevens bevatten, is dat we de een aan de ander
‫toewijzen.
‫En dat resulteert er in wezen in dat we gewoon een kopie maken van alle stukjes gegevens die in mijn acteur zaten en
‫ze in alle stukjes plaatsen waaruit je acteur bestaat.
‫Dit kan dus een vrij dure procedure zijn, omdat uw CPU elk stuk geheugen in het origineel moet doorlopen
‫en evalueren en op de nieuwe locatie moet plaatsen, wat tijd kost.
‫Er is een manier om dit te omzeilen met behulp van iets dat een aanwijzer wordt genoemd.
‫Dus hier hebben we, in plaats van het geheel van de Mijn acteur op te slaan, een variabele genaamd een
‫mijn acteur of een acteur een acteur-aanwijzer die niet de hele acteur opslaat.
‫Het slaat alleen het adres op waar je een act kunt vinden.
‫U kunt dus zien dat er veel minder geheugen wordt gebruikt om een adres op te slaan.
‫En wat we dan doen, is je acteur, we slaan het adres van mijn acteur op, zodat het uiteindelijk naar de
‫originele acteur verwijst in plaats van de gegevens te kopiëren, vandaar de naamaanwijzer.
‫Dit is niet de eigenlijke syntaxis in C++.
‫In C++ is de syntaxis veel compacter.
‫We zeggen dat iets een pointer is door een sterretje achter het type te zetten.
‫Dus een actor-ster betekent dat dit een actor-aanwijzer is en om het adres van een variabele te krijgen, gebruiken we een ampersand die
‫we niet zullen gebruiken.
‫Maak nog veel gebruik van dit adres, want er zijn veel functies in Unreal die pointers
‫retourneren.
‫Dus we moeten alleen weten hoe we die punten moeten gebruiken in plaats van ze voorlopig te maken.
‫Dus een dergelijke functie waarmee we toegang kunnen krijgen tot andere objecten in onze scène, is get ona.
‫Dus waarom is dit van toepassing als we een onderdeel hebben dat eigendom is van een acteur?
‫Dus als we wilden dat dit onderdeel met onze acteur zou praten, om zijn locatie te krijgen, zijn locatie in te stellen en
‫dat soort dingen te doen, dan moeten we een verwijzing naar die acteur kunnen krijgen.
‫We willen er geen kopie van maken.
‫In feite willen we er geen kopie van zeggen omdat we de acteur willen veranderen.
‫Als we een wijziging aanbrengen in een kopie, zou deze niet echt in de scène verschijnen.
‫We moeten dus een variabele kunnen opslaan die een pointer naar een actor is.
‫De manier waarop we dit doen, zoals we zojuist in de dia's hebben gezien, is door een acteurstype te hebben.
‫Maar dan zetten we een ster aan het einde die ons vertelt dat dit geen acteur is die hier wordt opgeslagen, dit is
‫gewoon het adres van een acteur die wordt opgeslagen.
‫Dus we nemen de acteur en we gaan deze eigenaar noemen, en dan gaan we dat gelijk stellen aan het resultaat
‫van het bellen van eigenaar krijgen.
‫Dus die eigenaar krijgen is een functie van een actor-component waarmee je een eigenaar-aanwijzer kunt krijgen, een actor-aanwijzer kunt krijgen
‫die naar de eigenaar wijst, en een puntkomma aan het einde van die regel kunt plaatsen.
‫En wat we hier hebben is een variabele die het adres opslaat van een acteur die eigenaar is van dit specifieke
‫onderdeel.
‫Dus ik zou je willen uitdagen om iets te doen door het adres van deze variabele af te drukken.
‫Gebruik dus de actor-variabele en gebruik het percentage dat u opmaakt.
‫Geef het einde van de logboeken op.
‫Dus procent u betekent in wezen dat u een geheel getal zonder teken gebruikt.
‫Dat betekent een geheel getal dat niet negatief kan zijn, wat logisch is omdat adressen niet negatief kunnen
‫zijn als we het hebben over waar we geheugen kunnen vinden en dan uitzoeken wat het afdrukt, ga spelen, bekijk het logbericht,
‫kijk wat het print uit.
‫Verandert het tussen verschillende spelen als je stopt met spelen en opnieuw begint te spelen?
‫En hoe zit het als de film op meerdere acteurs draait?
‫Zijn er meerdere verschillende adressen afgedrukt in de console?
‫Pauzeer de video en doe wat onderzoek.
‫Oké.
‫Welkom terug.
‫Dus we gaan naar dit andere logboek en we zeggen verhuizer, eigen adres, dubbele punt.
‫Weet je, dat is waar het het punt van waarde gaat plaatsen.
‫En dan gaan we de werkelijke aanwijzer plaatsen.
‫Dus we gaan de eigenaar hier hebben.
‫Dus het gaat het adres van de eigenaar uitprinten.
‫Laten we overgaan op onwerkelijk.
‫Raakt controle alt f 11.
‫En als dat klaar is met compileren, gaan we op play drukken.
‫En wat we zien is dat het logbericht 'Verplaats het adres van de eigenaar' binnenkomt en het geeft
‫ons een heel groot aantal voor dit adres.
‫Wat als ik stop met spelen en voor een seconde opnieuw speel?
‫Je kunt zien dat het adres behoorlijk verschillend is en dat komt omdat elke keer dat
‫we op play drukken, Unreal een hele nieuwe reeks acteurs in de scene creëert, in principe klaar om te spelen, vanaf het
‫begin.
‫Daarom zien we elke keer dat we op play drukken nieuwe adreslocaties.
‫Wat gebeurt er als ik bijvoorbeeld naar deze pilaar ga en een zet, een onderdeel ook aan de pilaar toevoeg, en we op play
‫drukken en naar de onderkant van mijn logs scrollen.
‫Je kunt zien dat er hier telkens twee verschillende adressen worden uitgeprint omdat er twee verschillende
‫actoren zijn die op twee verschillende locaties in het geheugen zijn opgeslagen.
‫Dit zijn dus de twee adressen en je kunt zien dat er nogal wat megabytes
‫aan verschil zijn tussen deze twee adressen, wat je alleen maar vertelt hoeveel informatie in het geheugen wordt opgeslagen
‫door Unreal en ook waarom het belangrijk is om efficiënt te zijn met het niet maken van te veel exemplaren.
‫Dat was het voor deze lezing.
‫Ik zie je binnen.
‫De volgende zal meer leuke dingen doen met pointers.