‫Ciao e Benvenuto.
‫In questa lezione impareremo come ottenere un'indicazione sull'atto di possedere un componente.
‫Scopriremo cos'è un puntatore, quali indirizzi sono in memoria e li
‫stamperemo anche nei nostri messaggi di registro.
‫Immergiamoci.
‫Quindi prendiamoci un secondo per capire un concetto fondamentale di cosa sta succedendo nella programmazione in generale
‫sugli indirizzi delle variabili.
‫Che cos'è un indirizzo di una variabile?
‫Bene, memorizziamo tutte le nostre variabili in memoria in quanto ci sono chip ram sul tuo computer e le variabili richiedono memoria
‫per archiviare i loro dati.
‫Quindi un numero in virgola mobile richiede 32 bit di dati o 64, se è un intero doppio, richiede una certa quantità
‫di memoria.
‫Inoltre, più grandi sono le strutture che hai o più grandi sono le classi che hai, ad esempio gli
‫attori possono essere molto grandi e comprendere molti dati potrebbero richiedere anche pochi kilobyte di memoria per attore, cose del
‫genere.
‫Bene, quella memoria deve vivere da qualche parte in questo grande campo di dati vuoti che sono i tuoi banchi di memoria.
‫E quella posizione è conosciuta come un indirizzo.
‫Quindi come funziona in pratica?
‫Bene, immagina di avere questo grande campo di zeri e uno.
‫Questi sono i dati sulla tua ram.
‫Bene, allora la variabile, una variabile attore chiamata il mio attore, deve avere una certa posizione all'interno di
‫quella memoria che è allocata per memorizzare i dati nell'attore.
‫Quindi questa sezione rossa della memoria potrebbe essere il punto in cui
‫memorizziamo i dati per questo particolare attore e ha un indirizzo solitamente indicato in binario o esadecimale che è essenzialmente solo la posizione.
‫Se inizi a contare tutti i byte, tutti gli uno e gli zeri qui, infatti, in realtà non contiamo i singoli
‫uno e zeri.
‫Contiamo a passi da otto, ma non è troppo importante.
‫Contiamo i byte.
‫Questo è essenzialmente l'indirizzo da cui iniziamo.
‫Parliamo del nostro attore.
‫E poi ogni tipo ha una certa dimensione.
‫Quindi sappiamo che l'attore richiederebbe così tanti byte di dati.
‫E quindi questo ci dice dove trovare i dati sul nostro particolare attore.
‫Quindi perchè è importante?
‫Bene, diamo un'occhiata alla situazione in cui potremmo voler fare una prova.
‫Due attori.
‫Abbiamo solo due variabili che fanno riferimento agli stessi dati.
‫Bene, nel caso ingenuo, dovremmo semplicemente copiare questo.
‫Quindi abbiamo un pezzo di memoria che è allocato alla variabile my attore da un altro pezzo di memoria che è allocato a
‫una variabile vuota chiamata tuo attore, a cui non abbiamo ancora assegnato nulla.
‫E poi quello che vogliamo fare perché vogliamo che contengano gli stessi dati, è semplicemente assegnarli l'uno
‫all'altro.
‫E questo si traduce essenzialmente in noi che facciamo una copia di tutti i bit di dati che erano nel mio attore e li
‫mettiamo in tutti i bit che compongono il tuo attore.
‫Quindi questa può essere una procedura abbastanza costosa perché la tua CPU deve esaminare e valutare ogni pezzo di
‫memoria nell'originale e metterlo nella nuova posizione, il che richiede tempo.
‫Ora c'è un modo per aggirare questo usando qualcosa chiamato puntatore.
‫Quindi qui, invece di memorizzare l'intero My Actor, abbiamo una variabile chiamata my attore o
‫attore un puntatore attore che non memorizza l'intero attore.
‫Memorizza solo l'indirizzo dove puoi trovare un atto.
‫Quindi puoi vedere che in realtà utilizza molta meno memoria per memorizzare un indirizzo.
‫E poi quello che facciamo è nel tuo attore, memorizziamo l'indirizzo del mio attore, quindi finisce per puntare all'attore originale
‫piuttosto che copiare i dati, da cui il puntatore del nome.
‫Ora questa non è la sintassi effettiva in C++.
‫In C++, la sintassi è molto più condensata.
‫Diciamo che qualcosa è un puntatore mettendo una stella dopo il tipo.
‫Quindi una star dell'attore significa che questo è un puntatore dell'attore e per ottenere l'indirizzo di una variabile, usiamo una e
‫commerciale che non useremo.
‫Fai ancora molto uso di questo indirizzo perché ci sono molte funzioni in unreal che restituiscono
‫puntatori.
‫Quindi dobbiamo solo sapere come utilizzare quei punti piuttosto che crearli per il momento.
‫Quindi una di queste funzioni che ci consente di accedere ad altri oggetti nella nostra scena è ottenere ona.
‫Allora perché questo si applica quando abbiamo un componente di proprietà di un attore?
‫Quindi, se volevamo che questo componente parlasse con il nostro attore, per ottenere la sua posizione, per impostare la sua posizione e fare
‫cose del genere, allora dobbiamo essere in grado di ottenere un suggerimento per quell'attore.
‫Non vogliamo prenderne una copia.
‫In effetti, non vogliamo dirne una copia perché vogliamo cambiare l'attore.
‫Se stiamo apportando una modifica a una copia, in realtà non verrebbe visualizzata nella scena.
‫Quindi dobbiamo essere in grado di memorizzare una variabile che sia un puntatore a un attore.
‫Il modo in cui lo facciamo, come abbiamo appena visto nelle diapositive, è avere un tipo di attore.
‫Ma poi mettiamo una stella alla fine che ci dice che questo non è un attore che viene archiviato qui, questo
‫è solo l'indirizzo di un attore che viene archiviato.
‫Quindi prendiamo l'attore e chiameremo questo proprietario, quindi lo imposteremo uguale al risultato
‫della chiamata get owner.
‫Quindi ottenere proprietario è una funzione di un componente attore che ti consente di ottenere un puntatore proprietario, ottenere un
‫puntatore attore che punta al proprietario, mettere un punto e virgola alla fine di quella riga.
‫E quello che abbiamo qui è una variabile che memorizza l'indirizzo di un attore che possiede questo particolare
‫componente.
‫Quindi vorrei sfidarti a fare qualcosa stampando l'indirizzo di questa variabile.
‫Quindi usa la variabile attore e usa la percentuale che formatti.
‫Specificare la fine dei log.
‫Quindi percento significa essenzialmente che stai usando un numero intero senza segno.
‫Ciò significa un numero intero che non può essere negativo, il che ha senso perché gli indirizzi non
‫possono essere negativi quando parliamo di dove trovare la memoria e poi scopri cosa stampa, vai a giocare, guarda il messaggio di
‫registro, guarda cosa si stampa.
‫Cambia tra le diverse riproduzioni se smetti di giocare e ricominci a giocare?
‫E se il film fosse su più attori?
‫Nella console sono stampati più indirizzi diversi?
‫Metti in pausa il video e fai una piccola indagine.
‫Bene.
‫Ben tornato.
‫Quindi andremo su quest'altro registro e diremo traslocatore, proprio indirizzo, due punti percentuali.
‫Sai, è qui che metterà il punto di valore.
‫E poi metteremo il puntatore vero e proprio.
‫Quindi avremo il proprietario qui dentro.
‫Quindi stamperà l'indirizzo del proprietario.
‫Entriamo nell'irreale.
‫Colpi control alt f 11.
‫E quando finisce di compilare, premiamo play.
‫E quello che stiamo vedendo è che il messaggio di registro sposta l'indirizzo del proprietario sta arrivando e ci sta
‫dando un numero molto grande per questo indirizzo.
‫Cosa succede se smetto di giocare e gioco di nuovo solo per un secondo?
‫Puoi vedere che l'indirizzo è sostanzialmente diverso e questo perché ogni volta che
‫colpiamo play, Unreal crea un set completamente nuovo di attori nella scena, praticamente pronti per recitare, partendo da
‫zero.
‫Ecco perché vediamo nuove posizioni di indirizzi ogni volta che premiamo Play.
‫Cosa succede se vado su questo pilastro, ad esempio, e aggiungo una mossa, anche un componente al pilastro, e premiamo play e scorriamo
‫verso il basso fino alla fine dei miei registri.
‫Puoi vedere che in ogni segno di spunta vengono stampati due indirizzi diversi qui perché ci sono
‫due attori diversi che sono memorizzati in due posizioni diverse nella memoria.
‫Quindi questi sono i due indirizzi e puoi vedere che in realtà ci
‫sono alcuni megabyte di differenza tra questi due indirizzi, il che ti dice solo quante informazioni
‫vengono archiviate in memoria da Unreal e anche perché è importante essere efficienti nel non fare troppe copie.
‫Questo è tutto per questa lezione.
‫Ci vediamo dentro.
‫Il prossimo farà cose più divertenti con i puntatori.