‫Ciao e Benvenuto.
‫In questa lezione, capiremo i passaggi principali coinvolti nella compilazione di file C++ in
‫Unreal.
‫Entriamo e vediamo come funzionano.
‫Quindi arriverà presto il momento di iniziare a utilizzare il codice dall'esterno, da altri file, e
‫dobbiamo imparare come funziona in C++.
‫Per farlo, dobbiamo fare una piccola deviazione e capire più in dettaglio cosa
‫sta succedendo quando compiliamo il nostro codice C++ in binario.
‫Quindi ecco i passaggi di compilazione che vengono utilizzati.
‫Iniziamo con il tuo codice, i tuoi file C++, la tua testa di file, il tutto in vari file di testo.
‫Questi vengono inseriti in uno strumento chiamato Unreal Handed Tool.
‫Ora, questo strumento è responsabile di prendere tutti i pezzi di sintassi specifici irreali e di usarli
‫per generare più codice C++.
‫Quindi diamo un'occhiata ad alcuni esempi di dove abbiamo questa sintassi specifica irreale, questa nuova
‫classe in lettere maiuscole che è una sintassi specifica irreale, e così è l'API Crypt Reader qui e il
‫corpo generato lì.
‫E fondamentalmente quello che sta succedendo qui è che lo strumento di intestazione irreale vedrà questi diversi pezzi di sintassi nel tuo
‫codice e andrà, ok, devo fare il mio lavoro.
‫Devo andare lì, devo aggiungere un sacco di cose.
‫Sostituirà il tuo corpo generato con un mucchio di codice che ci semplifica la vita quando usi
‫Unreal.
‫Fa anche cose come le proprietà U e le funzioni U.
‫Aggiunge tutte le cose di cui ha bisogno in modo che possa comunicare con il mondo del progetto.
‫Quindi questo è il primo passo.
‫Converte tutte le sue cose specifiche irreali in C++ reale.
‫Una volta ottenuto il C++ effettivo, possiamo inserirlo in un processo di compilazione C++ standard, che
‫richiede tre passaggi.
‫Il primo è occuparsi del passaggio di pre-elaborazione, quindi questo toccherà effettivamente qualsiasi sintassi C++ e in realtà si occuperà
‫solo di righe che iniziano con un hash.
‫Quindi abbiamo alcune di queste direttive di preelaborazione.
‫Questi sono gestiti dal preprocessore.
‫Il passo successivo è quello che chiamiamo effettivamente compilatore.
‫Prende un codice e lo converte in binario eseguibile, ma non completa del tutto il passaggio perché lo
‫fa solo su singoli C++, quelle che sono note come unità di traduzione, fondamentalmente file C++.
‫Quindi prende un file C++ e lo traduce in binario individualmente, ogni singolo file C++.
‫E poi il terzo passaggio è il linker, che riunisce tutto ciò e genera un eseguibile che
‫possiamo effettivamente eseguire un singolo eseguibile.
‫Quindi diamo un'occhiata a questi passaggi di compilazione standard in modo un po' più dettagliato con un file di
‫esempio.
‫Quindi immagina di avere un game dot CP ed è un gioco molto, molto semplice perché tutto ciò che fa è sommare uno
‫e uno insieme.
‫Ma per sommare uno e uno insieme, deve usare una funzione dichiarata in un file diverso nella
‫matematica due.
‫H Quindi la matematica dichiara ad, ma in realtà non definisce cosa fa.
‫Quindi questo è fatto nel passaggio del punto matematico.
‫E puoi vedere che è davvero un'implementazione molto semplice.
‫Ora, cosa succede nella fase di pre-elaborazione?
‫Bene, come ho detto, si occupa di tutte le direttive del preprocessore, che sono cose che iniziano con un
‫hash.
‫Quindi l'hash include la matematica, che in pratica significa semplicemente copiare tutto in Master H qui.
‫Quindi quello che fa è prendere questi due file e li combina insieme per creare un
‫nuovo file di output chiamato game dot In pratica gioco da includere e puoi vedere che è incluso.
‫La definizione di masturbazione ha sostituito la direttiva del preprocessore hash.
‫Quindi ora game dot II ha una definizione per l'operazione di aggiunta e quindi eseguiamo il preprocessore su math dot
‫CVP.
‫Ma poiché non ha alcuna direttiva per il preprocessore, praticamente nulla viene modificato lì.
‫Il passaggio successivo è che la compilazione è probabilmente il passaggio più importante
‫e complicato, perché quello che fa è prendere quel C++ in ogni singolo file e convertirlo in binario, ma non è un binario completo
‫perché, ad esempio, il mio gioco in realtà non lo fa sa come implementare e conosce solo la forma di quella
‫funzione di aggiunta.
‫Quindi deve essere compilato in seguito e compilato dal linker.
‫Quindi il collegamento prenderà il binario, lo creerà per il file game dot obj e il binario creato
‫per il file del metodo e li riunirà per creare un game dot xy che combina il binario per
‫entrambi e infine è un eseguibile completo che noi può effettivamente funzionare perché ha la definizione per tutto ciò di cui ha
‫bisogno.
‫Ora, perché abbiamo un processo così complicato?
‫L'idea qui è che velocizza il nostro tempo di compilazione.
‫Perché se solo facessi una catena.
‫Per giocare a dormire a puntino.
‫In realtà non ho bisogno di eseguire l'intero processo di compilazione.
‫Tutto quello che devo fare è eseguire i bit che coinvolgono il punto di gioco CBP, quindi eseguirei il preprocessore solo sul CP.
‫Quindi eseguirei il compilatore solo sul gioco su I.
‫E poi posso riutilizzare il file math dot obj di prima.
‫Non ho bisogno di ricompilarlo perché non è cambiato nulla in questo.
‫Allo stesso modo, se cambio solo il punto CP matematico, non dovrei ricompilare il gioco in un file OBJ, motivo per cui
‫questo è un processo più efficiente e perché lo stiamo facendo in primo luogo.
‫Quindi vorrei che facessimo un piccolo esperimento e cercassimo di capire perché includiamo spostare un punto h e spostare
‫il suo file CP punto?
‫Qual è il motivo?
‫Perché non possiamo semplicemente compilare il file C++ senza includere il punto move h.
‫Quindi l'esperimento che faremo è commentare la riga di inclusione dell'hash.
‫Quindi, usando una doppia barra in avanti per fare un commento davanti a quella riga, che sostanzialmente
‫lo farà essere rimosso dal preprocessore invece che dal preprocessore che lo sostituirà con il contenuto del
‫file.
‫Quindi ricompilare e vorrei che tu dessi un'occhiata ai messaggi di errore che escono e vedi cosa
‫dice per vedere se puoi provare a capire per cosa stiamo includendo questa mossa.
‫Metti in pausa il video e prova.
‫Bene.
‫Ben tornato.
‫Quindi mettiamo una doppia barra all'inizio di questa riga, che sostanzialmente la rende nulla.
‫E poi faremo un controllo alt f 11 e daremo un'occhiata all'output del live coding.
‫Quindi guarda, abbiamo subito degli errori molto, molto presto.
‫E quello che sta dicendo è che il tuo mover non è una classe o uno spazio dei nomi e ci sono altre cose
‫quaggiù.
‫Sta dicendo che il componente tecnologico primario è stato dichiarato super è nella classe o il proprietario dello spazio dei
‫nomi è un identificatore sconosciuto.
‫E fondamentalmente quello che sta dicendo è che hai parlato del tuo traslocatore qui, ma non l'hai comunque definito,
‫non l'hai dichiarato da nessuna parte.
‫Quindi non lo so.
‫Il compilatore C++ dice, non so cosa sia.
‫Ecco perché siamo hash includendo il punto motore h perché spostalo o H dichiara la classe.
‫Dice che un motore U è una classe e deriva dal fatto che agisci come un componente e ha questi metodi, ecc.
‫sta dichiarando cosa significa essere quella classe.
‫Quindi, senza quella dichiarazione, il compilatore C++ non può continuare ed è per questo che dobbiamo includere quel file di
‫intestazione.
‫Roba fantastica.
‫Quindi si spera che ora capiate un po' meglio il processo coinvolto nella compilazione di C++ e in particolare
‫nella compilazione di C++ in Unreal.
‫Ci vediamo alla prossima lezione.