‫Ciao e Benvenuto.
‫In questa lezione, imposteremo il collegamento tra il motore e il grilletto usando una tecnica chiamata iniezione di dipendenza
‫in modo che entro la fine della lezione, se inseriamo il gargoyle, la porta si abbassi,
‫o almeno in parte lo fa.
‫Immergiamoci e vediamo come funziona.
‫E prendo una tazza.
‫Abbiamo visto che c'è una dipendenza, quella che chiamiamo una dipendenza per l'handle della fisica.
‫Questo grabber non può fare il suo lavoro a meno che tu non abbia un componente di gestione fisica da qualche parte in giro, ora succede
‫solo che il componente trigger è lo stesso.
‫Il componente trigger, per svolgere correttamente il proprio lavoro, deve avere accesso a un componente mover.
‫Tuttavia, in questo caso è un po' più complicato perché sicuramente, nel caso della nostra porta segreta,
‫il grilletto e l'oggetto in movimento sono all'interno dello stesso attore.
‫Quindi potresti ottenere un oggetto trovando il componente di tipo sull'attore.
‫Ma cosa succederebbe se e avremmo questa situazione nella mia sceneggiatura in cui voglio che il mio grilletto sia
‫in una parte diversa della stanza rispetto all'attore che si sta muovendo bene per consentire quel tipo di flessibilità.
‫Vogliamo che il trigger non debba andare a trovare le proprie dipendenze.
‫E in realtà c'è un nome per questo tipo di concetto di programma.
‫Si chiama iniezione di dipendenza.
‫Fondamentalmente, è nel caso in cui abbiamo qualcosa che dice, ho bisogno di un altro oggetto, ma non riesco a
‫trovarlo da solo o non voglio trovarlo da solo.
‫E spesso è sensato non lasciare che l'oggetto stia facendo il suo lavoro, facendogli avere un altro compito nel cercare
‫di entrare in possesso di un oggetto.
‫Quindi il modo in cui possiamo farlo è creare un meccanismo per i progetti per dire al componente del trigger
‫dove trovare un motore.
‫E il modo in cui lo faremo è creare una funzione richiamabile blueprint sul nostro componente trigger.
‫Quindi sarà pubblico.
‫Lo metteremo nella sezione pubblica sotto il componente tick e sarà una funzione
‫U in modo che possa essere quindi tra parentesi, blueprint richiamabile.
‫E non è necessario che ci sia molto in questa funzione.
‫Sarà nullo perché non è necessario che restituisca nulla, ma verrà impostato come motore, quindi
‫imposterà un collegamento al motore e affinché possa impostare un collegamento al motore, deve prendere un
‫puntatore a un componente motore.
‫Quindi quella sarai la tua stella motore e possiamo semplicemente chiamarlo il motore in questo modo e mettere punto e virgola alla fine di
‫quella riga.
‫E dobbiamo conservarlo da qualche parte.
‫Quindi creeremo una nuova variabile privata.
‫Non sarà una nuova proprietà e sarà solo un puntatore di spostamento a
‫U, che chiameremo anche mover.
‫Così e quello che faremo è implementare questo set mover nel CPP in modo che imposti a questa mossa un puntatore,
‫che per impostazione predefinita sarà nullo.
‫E dobbiamo fare un'altra cosa.
‫Dobbiamo includere il file di intestazione per il nostro motore.
‫Ora, in questo caso, poiché il file di intestazione si trova nella stessa
‫cartella del componente trigger, tutto ciò che dobbiamo fare è includere hash include mover H e questo assicurerà che il componente trigger sia a conoscenza del tipo
‫di mover.
‫Quindi esaminiamo il nostro componente trigger.
‫CP E lo metterò sotto il nostro componente tick che implementeremo set mover.
‫Metteremo prima la classe che attivi il componente e la indentiamo.
‫Elimina il punto e virgola e aggiungi le parentesi graffe.
‫E in sostanza tutto ciò che dovremo fare qui, cambiamo il nome solo nel file C++.
‫In realtà non importa se il nome dei parametri corrisponde tra header e C++.
‫Quindi possiamo cambiarlo qui e dire che il nuovo motore è ciò che sta arrivando per impostare il motore.
‫E così possiamo impostare la nostra variabile locale, la nostra variabile di classe mover uguale al nuovo mover like.
‫Quindi ora è piuttosto importante non saltare questo passaggio di ridenominazione perché se il parametro di input
‫ha lo stesso nome di una delle variabili sulla classe, unreal per impostazione predefinita imposterà che sia un errore.
‫Si chiama shadowing e Unreal non vuole che tu lo faccia, quindi devi assicurarti di avere il nome
‫del tuo parametro diverso dalla variabile ora perché queste nuove funzioni non vengono sempre visualizzate con le
‫modifiche al codice live.
‫Ho intenzione di chiudere la ricompilazione dell'editor dal codice di Visual Studio e quindi di riavviare dal nuovo
‫progetto.
‫Ora andiamo nel cassetto dei contenuti, apriamo il nostro progetto del muro segreto e
‫poi dal nostro nodo Begin Play nel grafico degli eventi, scendiamo da qui e cerchiamo il set mover.
‫Ora nota che ci sono due opzioni qui.
‫Uno, sarebbe impostare il componente che è anche chiamato motore e uno è una funzione sul componente
‫trigger.
‫Quindi vogliamo selezionare quella che è una funzione sul componente trigger.
‫E poi quello che vogliamo fare è trascinare il nostro componente motore come gli altri argomenti di questa funzione e questo dovrebbe fare
‫il trucco.
‫È impostato il motore all'inizio del gioco.
‫Quindi ora essenzialmente quello che vogliamo che accada è che il nostro componente trigger dovrebbe essere impostato
‫e impostare il valore booleano dovrebbe spostarsi qui.
‫Quindi questa sarà la mia sfida per te creare alcune funzioni pubbliche in mover e mover.
‫CP Dovrebbe essere impostato, dovrebbe spostarsi e dovrebbe aggiornare la tua variabile di proprietà.
‫In effetti, puoi renderla non più una nuova proprietà perché di tanto in tanto la
‫imposteremo tramite codice, puoi inserirla nella sezione pubblica.
‫Deve essere pubblico perché proveremo ad accedervi dal nostro componente trigger.
‫E puoi chiamarlo sul puntatore del motore che abbiamo nel componente trigger dall'impostazione del componente tick, il booleano
‫appropriato, se vogliamo che si sblocchi o si blocchi di nuovo, metti in pausa il video
‫e prova.
‫Va bene, bentornato.
‫Quindi rimuoverò la proprietà da dovrebbe spostare Andrò alla
‫sezione pubblica appena sotto il componente TTIC e creerò un set vuoto dovrebbe spostarsi prendendo un booleano
‫che chiameremo dovrebbe muoviti così.
‫E poi prendiamo questo e andiamo al move CP e lo implementiamo, sostituendo il punto e virgola,
‫aggiungendo nella classe you move due punti, due punti e quindi praticamente di nuovo possiamo chiamarlo il nuovo dovrebbe
‫muoversi e possiamo dire che dovrebbe muoversi è uguale a nuovo dovrebbe muoversi.
‫Ora ti starai chiedendo, perché non rendiamo le variabili stesse pubblicamente accessibili in modo
‫da poterle impostare direttamente?
‫In genere non è una buona pratica in C++ perché se permetti a qualcuno di cambiare le tue variabili, non
‫sai mai cosa potrebbe succedergli.
‫Considerando che se hai un metodo lì per farlo per te, ti consente in seguito di modificare il modo in cui strutturi le
‫variabili interne senza dover modificare le tue funzioni pubbliche, il che significa che ci sono meno aggiornamenti alle diverse
‫classi che devi fare.
‫Quindi generalmente, di regola, utilizziamo sempre setter e getter se dobbiamo accedere a variabili in altre
‫classi.
‫Quindi ora che abbiamo creato quella nuova funzione, andiamo nel componente trig CP dove abbiamo attualmente i
‫nostri messaggi di registro.
‫Quello che vogliamo fare è accedere al nostro puntatore del motore, quindi faremo in modo che il set di frecce del motore si muova.
‫E nel caso in cui abbiamo un attore accettabile, dovrebbe essere vero.
‫Dovremmo spostare il punto e virgola alla fine della riga.
‫E nell'altro caso, beh, allora probabilmente non dovremmo.
‫Quindi sposteremo il set di frecce dovrebbe spostarsi e tra parentesi mettere false rimuovere quella R extra che avevo alla fine
‫del mio metodo e ricompilare ora in questo caso perché ho solo aggiunto questa funzione in
‫C++ land e non è un progetto richiamabile.
‫Non credo di aver bisogno di riavviare l'editor per far funzionare questa funzionalità, chiudere il nostro
‫registro di output, andare verso il nostro gargoyle e iniziare a giocare e prenderlo.
‫Usciamo da questa gabbia e mettiamola nell'alcova e loro vanno, Si sta abbassando, ma si ferma non appena il gargoyle cade, il
‫che non è l'ideale perché il gargoyle non è davvero tenuto in posizione e il muro
‫non lo è completamente giù.
‫E poiché sta simulando la fisica, uscirà da quell'alcova, vero?
‫Quindi quello che dobbiamo fare è assicurarci che una volta che lo lasciamo cadere nella nostra area di trigger, venga riparato
‫lì e rimanga.
‫Quindi questo sarà l'argomento della prossima conferenza.
‫Ci vediamo lì.