‫Ciao e Benvenuto.
‫In questa lezione, aggiungeremo nuovi componenti all'app player, la maniglia
‫della fisica, e impareremo come ottenere un puntatore ad esso nel nostro componente grabber.
‫Vedremo anche come proteggerci dal crash accidentale del motore.
‫Entriamo e vediamo come.
‫Ora, per afferrare un oggetto, dobbiamo interagire con il sistema fisico.
‫E in realtà c'è un componente che possiamo usare chiamato maniglia fisica, che ci permette di afferrare oggetti fisici e dire loro dove
‫vogliamo essere nel mondo, ma farlo in modo tale da riconoscere i vincoli fisici in modo che non
‫lo faccia t passare attraverso i muri.
‫E sembra che l'oggetto sia su una molla piuttosto che seguire rigidamente un punto specifico in cui gli
‫diciamo di andare.
‫Quindi useremo questi componenti della maniglia della fisica.
‫Andremo ad aggiungerlo al nostro giocatore, BP, insieme al grabber.
‫Quindi andiamo al pulsante Aggiungi sotto il pannello dei componenti e cerchiamo l'handle della fisica e aggiungiamo.
‫E puoi vedere che è una componente dell'attore, non una componente della scena, perché
‫scende nella sezione inferiore, quindi in realtà non ha una trasformazione fisica propria.
‫Quello che facciamo con la maniglia della fisica è dirgli l'oggetto da afferrare e poi gli diciamo dove
‫vogliamo che metta l'oggetto che abbiamo afferrato.
‫Se vai alla documentazione, puoi vederlo nelle funzioni disponibili.
‫Se scorri verso il basso fino alla sezione della funzione, puoi vedere che c'è un componente di rilascio e un componente di
‫cattura nella funzione di posizione.
‫C'è anche una posizione e una rotazione di destinazione impostate.
‫È qui che vuole provare a mettere l'oggetto, ma ovviamente rispetterà qualsiasi vincolo fisico nel
‫farlo e lo farà in modo fluido come se fosse su una molla.
‫Ora, non useremo ancora queste funzioni, ma dobbiamo trovare un modo per entrare in possesso
‫di questo componente nel nostro componente grabber.
‫Allora come lo facciamo?
‫Bene, andiamo a prendere una C. P e dai un'occhiata a un big in gioco e prova a prenderlo.
‫Ora c'è una funzione su qualsiasi attore che ci permette di trovare un componente in base al suo tipo.
‫Ma qual è il tipo di maniglia fisica?
‫Bene, è un componente che gestisce la fisica che è in possesso di questo tipo che dobbiamo usare e includere e puoi vedere che
‫l'inclusione nella documentazione è il componente di gestione della fisica con barra in avanti del motore fisico.
‫Quindi copiamo che andiamo su un CP grabber e additivo in add draw debug helpers.
‫Quindi quello che faremo è fare un get ONA per ottenere il nostro atto
‫di possesso, un puntatore quindi a una freccia e un fantastico componente di ricerca per classe.
‫Ora questa funzione è un tipo speciale di funzione chiamata funzione modello in C++, e
‫questo significa che puoi passarle alcuni parametri che vengono effettivamente valutati durante la compilazione.
‫E il modo in cui lo fai è usare parentesi angolari come questa.
‫Quindi usi una parentesi angolare dopo la funzione e gli dai il tipo che vuoi che trovi,
‫che nel nostro caso è il componente che gestisci la tua fisica in questo modo.
‫E poi chiudi le parentesi angolari.
‫Ma poiché è una funzione, devi chiamarla anche usando parentesi regolari.
‫Quindi metti la seconda serie di parentesi dopo questo.
‫Quindi puoi vedere che questi argomenti in fase di compilazione vengono passati usando le parentesi angolari e quindi
‫quelli di runtime vengono passati usando le parentesi.
‫Ora, come una normale funzione, questa avrà un valore di ritorno e in questo caso il valore di ritorno sarà qualunque
‫sia il tipo che abbiamo passato qui.
‫Ma come puntatore, quindi possiamo prendere un puntatore del componente dell'handle della fisica e creare una variabile
‫per quello che chiameremo handle della fisica e impostarlo uguale a questo get owner trova componente per classe.
‫Ora ricordiamo un punto e virgola alla fine di questa riga ed è tutto ciò che serve per
‫poter entrare in possesso di un altro componente sul nostro stesso attore.
‫Ora ricorda che ti ho detto che i puntatori possono essere pericolosi perché a volte possono essere un null e questo
‫può portare a un crash.
‫Quindi immagina di aver dimenticato di mettere un componente di maniglia fisica sul nostro attore, o abbiamo messo un grabber su un nuovo
‫attore e non l'abbiamo ancora collegato con un componente di maniglia fisica.
‫Se questo è il caso, il puntatore dell'handle della fisica sarà un puntatore nullo.
‫E se proviamo a usare l'operatore freccia o l'operatore di riferimento su quel puntatore, il nostro motore andrà
‫in crash.
‫E a volte può essere davvero difficile vedere che aspetto abbia quell'incidente.
‫Quindi andrò avanti e causerò effettivamente questo arresto anomalo solo per mostrarti e potresti essere in grado
‫di riconoscerlo se ti dovesse succedere in futuro, riassegnarò il nostro puntatore dell'handle della fisica
‫uguale al puntatore nullo .
‫Parola chiave speciale.
‫È tutto.
‫No, Pietro.
‫È così che hai scritto il puntatore NULL in C++.
‫Quindi metti un punto e virgola alla fine.
‫E poi quello che possiamo fare è fare fisica, gestire la freccia, ottenere un nome in questo modo.
‫E se andiamo avanti e compiliamo usando la codifica live e quando la compilazione sarà terminata, andremo avanti e
‫ci assicureremo, prima di tutto, di salvare tutto ciò che abbiamo qui in corso in IBP plex e che sta per
‫andare in crash il motore.
‫E se vado avanti e premo play, questo è il risultato che otteniamo un crash.
‫Reporter E potresti essere tentato di pensare quando vedi questo che qualcosa è andato storto con l'irreale, ma in
‫realtà è il tuo codice che è in errore qui.
‫Puoi vedere che in questo rapporto sull'arresto anomalo, la prima riga dice che il problema deriva dal fatto che prendi i due punti, i
‫due punti, inizia a giocare.
‫E in realtà ci sta dando anche il numero di riga, che è la riga 28.
‫Quindi puoi vedere che a questo punto sulla riga 28, quando facciamo riferimento a quel puntatore, per
‫chiamare una funzione su di esso, abbiamo effettivamente commesso un grave errore nel non controllare prima se quel puntatore era
‫nullo.
‫Quindi è quello che dobbiamo fare.
‫E lo facciamo con un'istruzione if.
‫Fondamentalmente diciamo che se l'handle della fisica non è uguale al puntatore nullo, allora possiamo andare avanti e chiamare roba su quell'handle della fisica in modo da poter inserire l'handle della fisica,
‫ottenere il nome all'interno di questa istruzione if e questo ci protegge perché quel codice, che
‫il il codice di riferimento non verrà eseguito nel caso in cui abbiamo un
‫puntatore nullo.
‫Quindi andrò avanti e rimuoverò la riga 27 ora in cui lo stiamo impostando su un puntatore no
‫e ti sfiderò a stampare il nome del componente per te stesso.
‫Quindi stampa solo se abbiamo il componente effettivo, in pratica non abbiamo un puntatore nullo e usiamo un altro per avvisare se non siamo riusciti
‫a entrare in possesso di quel componente e provare a rimuovere il componente per controllare, mettere in pausa il
‫video e avere fa.
‫Bene.
‫Ben tornato.
‫Quindi creeremo un nuovo messaggio di registro qui e diremo che abbiamo un handle di fisica, due punti percentuali se
‫abbiamo questo nome di handle di fisica.
‫Quindi mi limiterò a tagliare e incollare come secondo argomento o quarto argomento nel registro U.
‫E metterò una stella perché è un filo.
‫Ora aggiungiamo un'istruzione alt sotto le nostre istruzioni if.
‫E qui inseriremo un altro registro annuale, che sarà questa volta
‫invece di un display, inseriremo un messaggio di avviso che apparirà in giallo e
‫diremo di no maniglia fisica trovata, punto esclamativo.
‫Ora, non hai l'editor aperto.
‫Quindi eseguirò un turno di controllo B per compilare all'interno del codice di Visual Studio, chiudere il terminale
‫quando ha esito positivo e riavviare dal nuovo progetto.
‫Una volta avviato, andiamo avanti e premiamo play, apriamo il registro di output e dovremmo vedere il messaggio di
‫registro.
‫A ha un manico di fisica.
‫Quale nome il nome è familiare alla fisica.
‫E se dovessimo passare al nostro riproduttore di segnali acustici e rimuovere effettivamente l'eliminazione di quella maniglia fisica e andare
‫avanti e giocare.
‫Ora dai un'occhiata al nostro registro di output e se ne vanno, abbiamo un avviso giallo che non è stata trovata alcuna
‫maniglia fisica.
‫Quindi smettiamo di giocare.
‫Andiamo avanti e aggiungiamo di nuovo l'handle della fisica perché lo vorremo e salveremo il giocatore.
‫BP Grandi cose.
‫Quindi abbiamo capito come possiamo ottenere altri componenti dall'interno di un componente e abbiamo imparato come
‫gestire un null.
‫Un punto è e perché dobbiamo stare attenti.
‫Ci vediamo alla prossima lezione.