‫Ehi.
‫Ben tornato.
‫Ora sappiamo che dobbiamo ottenere il risultato del colpo sotto il cursore.
‫Parleremo un po' di più di come funziona e cosa significa in questo video.
‫Quindi il nostro obiettivo è ottenere i risultati dei risultati sotto il cursore e mostrare questa posizione, e possiamo farlo
‫disegnando una sfera di debug.
‫Impareremo anche come farlo.
‫Quindi parliamo di qualcosa chiamato risultato di successo.
‫Nei giochi vorranno spesso fare qualcosa del genere.
‫Avremo un punto nello spazio.
‫Chiameremo questo punto inizio e ha il vettore di tipo F e avremo una posizione finale.
‫Questo sarà anche un punto nello spazio di tipo F vettore.
‫Ora diciamo che vorremmo disegnare una linea invisibile dal punto iniziale al punto finale.
‫E nel momento in cui tracciamo questa linea, vorremmo vedere se ci sono oggetti tra la posizione
‫iniziale e quella finale.
‫Ora, se ci sono, allora questa linea che stiamo disegnando nello spazio colpirà quell'oggetto.
‫In superficie, quando ciò accade, lo chiamiamo un evento di successo.
‫Ora, quando disegniamo una linea invisibile come questa, si chiama esecuzione di una traccia di linea.
‫E quando colpiamo qualcosa, diciamo che abbiamo un colpo di traccia.
‫Ora, se si colpisce qualcosa e si ottiene un evento hit, l'hit di traccia memorizza le informazioni in uno
‫struct chiamato risultato hit.
‫Il suo tipo è il risultato del colpo F.
‫Ora la struttura dei risultati dell'hit F contiene variabili che memorizzano informazioni sull'evento hit, inclusa
‫la posizione dell'hit come vettore f nello spazio e l'attore che abbiamo colpito, tra le altre informazioni.
‫Ora, quando eseguiamo una traccia di linea, lo facciamo specificando un canale di collisione.
‫Solitamente con le tracce di linea, scegliamo il canale chiamato visibilità.
‫Esiste un enum chiamato E Collision Channel, e in questo enum c'è una costante enum chiamata
‫visibilità XY.
‫Questo è uno dei parametri che specifichiamo quando si esegue una traccia di linea.
‫Ora, se specifichiamo il canale di visibilità, ciò significa che gli oggetti che sono impostati per bloccare il canale
‫di visibilità nelle loro impostazioni di collisione registreranno gli eventi hit.
‫Tutti gli oggetti che non sono impostati per bloccare il canale di visibilità non genereranno eventi hit.
‫Ora vorremmo il risultato della traccia sotto il cursore.
‫Immagina di avere lo schermo qui ed ecco ora il nostro cursore.
‫Sulla punta del nostro cursore, abbiamo un punto sullo schermo in cui utilizziamo la funzione per ottenere il risultato del colpo
‫sotto il cursore.
‫Quello che succede è che abbiamo la nostra fotocamera e potrebbe vedere alcuni oggetti nel mondo, come il pavimento qui.
‫E stiamo eseguendo una traccia di linea dalla telecamera nel punto sullo schermo corrispondente alla posizione del nostro
‫cursore, e stiamo riprendendo la traccia di linea direttamente nel mondo.
‫E se colpiamo qualcosa, genereremo un evento di successo e memorizzeremo le informazioni in una struttura del risultato di successo.
‫Quindi scopriamo come possiamo farlo.
‫Sono qui in Tank CP e quello che mi piacerebbe fare è ottenere il risultato del colpo sotto il cursore ogni fotogramma, il che significa che
‫abbiamo bisogno della funzione tick.
‫Quindi, di nuovo, torniamo alla base e troviamo qui la nostra funzione tick.
‫Ora non lo stiamo usando per nulla nel pedone base, quindi possiamo spostare questa funzione nella classe del carro armato proprio come
‫abbiamo fatto con Begin Play.
‫Quindi evidenzierò la dichiarazione della funzione insieme al relativo commento e la copierò.
‫E dopo eliminerò l'intera sezione, pubblica e tutto, e poi tornerò in Tank H e qui
‫nella sezione pubblica incollerò la dichiarazione della funzione tick.
‫Ora non lo stiamo usando nel pedone base, quindi rimuoverò la funzione tick da base pont.
‫CP Ora è passato dal pedone di base.
‫Ora abbiamo qui dichiarato l'intento, ma dobbiamo anche definire la funzione in tank.
‫CP Lo farò qui nel serbatoio DHCP, appena sotto il componente di input del giocatore di configurazione.
‫Quindi diremo void tick.
‫Ci vuole un galleggiante chiamato Delta Time.
‫E c'è il nostro corpo.
‫Ora di nuovo, abbiamo bisogno di un tank appena prima della funzione tick, insieme all'operatore di risoluzione dell'oscilloscopio.
‫E dobbiamo anche chiamare super tick and pass in Delta time.
‫Quindi ora abbiamo il segno di spunta sulla classe del carro armato.
‫Quello che vogliamo fare è ottenere i risultati del colpo sotto il cursore.
‫Quindi ecco come lo facciamo.
‫La funzione che useremo esiste sul controller del giocatore chiamata get hit result sotto il cursore.
‫Abbiamo parlato di questo.
‫Ora ecco la sintassi.
‫Richiede un canale di traccia.
‫Ricorda, dobbiamo specificare un canale di traccia e utilizzeremo la visibilità.
‫Ora abbiamo due parametri di input aggiuntivi.
‫Il primo è un bool chiamato B trace complex.
‫Parleremo di cosa significa tra un secondo.
‫E il terzo parametro di input è un risultato F hit.
‫Ora farò clic su F hit result solo per vedere questo tipo qui nella documentazione.
‫E se scorro verso il basso, vedremo alcune delle variabili.
‫Uno di loro si chiama attore e la sua descrizione dice Attore colpito dalla traccia.
‫Abbiamo anche questo colpo di blocco B, che indica se questo colpo è stato il risultato di una collisione di blocco.
‫Ora, tra le altre variabili, abbiamo cose come il punto di impatto.
‫Questa è la posizione nello spazio in cui abbiamo effettivamente colpito qualcosa.
‫Allora perché non andiamo avanti e proviamo a chiamare questa funzione?
‫Per prima cosa vogliamo il nostro giocatore, controller e grazie a quello che abbiamo fatto qui e iniziare a giocare,
‫abbiamo giocatore, controller, ref.
‫Ora la prima cosa che dovremmo fare è controllare se il riferimento del controller del giocatore è valido.
‫Possiamo sempre passare un puntatore in un'istruzione if.
‫Restituirà true se il puntatore stesso non è un puntatore nullo.
‫Se è un puntatore null, restituirà false in un'istruzione if e non raggiungeremo mai l'interno
‫dell'istruzione if.
‫È sempre una buona idea controllare i nostri puntatori e assicurarsi che non siano nulli prima di usarli.
‫Ora otterremo il nostro giocatore, il riferimento del controller e useremo l'operatore freccia per
‫chiamare la funzione, ottenere il risultato del colpo sotto il cursore.
‫Ora possiamo vedere con il pop-up che abbiamo tre parametri di input.
‫Il primo è il canale di traccia.
‫Utilizzeremo EA Collision Channel e se digitiamo due due punti, otteniamo un menu a discesa che ci mostra tutte
‫le diverse costanti di enum nell'enum di EA Collision Channel.
‫Vogliamo usare la visibilità, quindi digiteremo visibilità XY per specificare che stiamo usando il canale di
‫visibilità.
‫Ora il prossimo parametro è chiamato B Trace Complex e passeremo false in questo.
‫Ora discuteremo tra qualche minuto cosa significa.
‫Ma per ora useremo false.
‫Ora per il terzo parametro, abbiamo bisogno di un risultato positivo.
‫Questa è una struttura del risultato del colpo di tipo F.
‫Ora, se passi il mouse su questo, vedrai che il risultato del colpo F viene passato come riferimento come
‫indicato dall'operatore di riferimento che sembra una e commerciale.
‫Ora, di solito quando passi qualcosa come riferimento, è un riferimento di costo, il che significa che la funzione non
‫sarà in grado di cambiarlo.
‫Ma qui stiamo passando un risultato F hit come riferimento non const.
‫Questo è generalmente un suggerimento che la funzione è progettata per modificare direttamente questo parametro di input.
‫Quello che farà ottenere il risultato dell'hit sotto il cursore è riempire quelle variabili nel risultato dell'hit con informazioni
‫sul risultato dell'hit.
‫Ciò significa che dobbiamo passare uno di questi risultati di f hit in.
‫Creeremo una variabile locale qui nel controllo if del risultato di tipo F hit.
‫E possiamo chiamare questo risultato hit e possiamo semplicemente passare questo N come terzo parametro di input.
‫Ora, dopo aver chiamato questa funzione, il risultato del risultato verrà riempito con i dati su questa traccia
‫di linea.
‫Ad esempio, possiamo accedere all'attore punto hit risultato per ottenere l'attore che è stato colpito o punto impatto punto per ottenere il punto nello
‫spazio in cui si è verificato l'evento hit.
‫Quindi il risultato del successo è quello che useremo per ottenere informazioni sulla traccia della linea.
‫Ora spesso è bello poter vedere il risultato di una traccia di linea.
‫Possiamo facilmente visualizzare il risultato di una traccia di linea disegnando una sfera di debug.
‫Le sfere di debug sono forme semplici che disegniamo nello spazio e sono ottime per mostrare una posizione e
‫le usiamo durante il debug.
‫In realtà non utilizziamo sfere di debug in un gioco a turni.
‫Quindi vediamo come possiamo disegnare una di queste sfere di debug.
‫Ora ecco la documentazione per una funzione chiamata draw debug sphere.
‫Esiste negli helper di debug di draw.
‫Quindi possiamo copiare questa intestazione e includerla ovunque vogliamo chiamare draw debug sphere.
‫Ora guarda tutti i parametri di input.
‫Innanzitutto, ci vuole un mondo in questo modo sa in quale mondo attirare la sfera.
‫Ci vuole un vettore F per il centro della sfera e un galleggiante per il raggio.
‫Ci vuole un N 32 per il numero di segmenti per quella sfera.
‫Più segmenti ci sono, più la sfera assume un colore F.
‫In questo modo sa in quale colore disegnare questa sfera.
‫Vuole sapere se vuoi linee persistenti.
‫In altre parole, le linee dovrebbero scomparire immediatamente o dovrebbero persistere?
‫Se persistono, vuole conoscere la vita della sfera.
‫Quando dovrebbe smettere di disegnare la sfera?
‫Se non disegni linee persistenti, supponi che desideri disegnarle per un singolo fotogramma,
‫quindi passeresti quello negativo come durata.
‫Ora gli ultimi due parametri sono opzionali, quindi lo terremo semplice discutendo solo dei primi
‫sette parametri.
‫Vediamo come funziona.
‫Ora disegnerò una sfera di debug in alto, includerò gli helper di debug del disegno.
‫È qui che viene dichiarata questa funzione della sfera di debug di disegno.
‫Ora scendiamo per iniziare a giocare e semplicemente disegna una sfera di debug per vedere come funziona.
‫Quindi chiamerò draw debug sphere e il file.
‫Il primo parametro di input è un nuovo mondo.
‫Possiamo ottenere il nostro mondo in qualsiasi momento chiamando Get World, Get World Restituisce un nuovo puntatore del mondo al nostro
‫mondo attuale.
‫Quindi soddisferà il primo input.
‫Successivamente, abbiamo bisogno di un vettore f per il centro della sfera.
‫Ora chiamiamo questo e iniziamo a suonare, quindi posso semplicemente chiamare la posizione dell'attore e questo otterrà
‫la posizione del nostro laghetto.
‫Dato che siamo nella classe dei carri armati.
‫Ora alzerò un po' la sfera.
‫Quindi aggiungerò un vettore F con zero punto F per x zero punto F per Y e dico 200 F per Z.
‫Ora inserirò questi parametri di input ciascuno sulla propria riga.
‫Quindi è chiaro cosa stiamo passando per ogni input.
‫Il secondo input sta ottenendo questa espressione, che è la posizione dell'attore, più un vettore che punta verso l'alto con
‫una lunghezza di 200.
‫La somma di questi due vettori insieme mi darà la posizione del serbatoio sollevato sull'asse Z di 200
‫unità.
‫Ora il prossimo parametro di input, sarà il raggio della sfera.
‫Sceglierò 100 F solo così possiamo vedere che aspetto ha una sfera di debug con un raggio di 100.
‫Il prossimo è il numero di segmenti.
‫scelgo 12
‫Vedremo come sarà.
‫Ora per un colore F, esiste una classe di colore F e ha molti colori integrati come il rosso.
‫Ora per il booleano chiamato B linee persistenti, sceglierò true.
‫E per il prossimo parametro di input abbiamo l'avviso di durata.
‫Ha un valore predefinito di uno negativo.
‫Ciò significa che per impostazione predefinita disegnerà la sfera di debug per un singolo frame.
‫Ma passerò in 30 F in modo da ottenere la sfera per 30 secondi e posso omettere gli ultimi due parametri.
‫Quindi ecco la nostra chiamata di funzione per disegnare la sfera di debug.
‫Compiliamo questo e vediamo come appare.
‫Ok, quindi sono tornato nell'editor.
‫Apro una seconda finestra in modo da poterla vedere a schermo intero.
‫Posso andare alle porte di visualizzazione della finestra e selezionare Viewport due e ora vedo questa seconda finestra.
‫Potrebbe non essere a schermo intero quando si apre, ma puoi sempre massimizzarlo.
‫Ora da qui posso giocare con alt p.
‫Ora controlla questo.
‫Ecco la nostra sfera di debug.
‫Notare che non è perfettamente rotondo.
‫Abbiamo scelto 12 per il numero di segmenti.
‫Più segmenti scegli, più linee saranno necessarie per disegnare la sfera.
‫Ora, questa è una sfera con un raggio di 100.
‫È abbastanza grande e il centro della sfera è nella posizione del serbatoio, più 200 unità
‫nell'aria.
‫Quindi è così che possiamo disegnare sfere di debug.
‫Quindi la tua sfida è disegnare una sfera di debug usando il risultato della traccia sotto il nostro cursore.
‫Quindi disegna una sfera di debug nella nostra nuova istruzione if in cui stiamo controllando se il riferimento del controller del giocatore non
‫è nullo.
‫Ora usando il nostro risultato del colpo, ottieni il punto di impatto dal risultato del colpo e usalo come Center for
‫the Sphere.
‫Ora per il parametro di input delle righe persistenti usa false e per la durata usa quello negativo.
‫E questo risulterà nel disegnare la sfera per un singolo fotogramma, il che va bene perché lo
‫chiamiamo ogni fotogramma all'interno della funzione tic.
‫Quindi metti in pausa il video e disegna la sfera di debug nella funzione tick.
‫Bene.
‫Quindi sono tornato qui a Tank.
‫Ora ho questa chiamata della funzione draw debug sphere qui e inizio a giocare così posso andare avanti e copiarlo
‫e rimuoverlo semplicemente dall'inizio del gioco e torneremo in tick qui all'interno della nostra istruzione if e sono
‫solo lo incolleremo qui e cambieremo alcuni dei parametri di input.
‫Per prima cosa, stiamo cambiando la posizione del centro della sfera.
‫Utilizzeremo il risultato del successo.
‫Quindi dirò il punto di impatto del punto del risultato colpito.
‫Ora per il raggio, vorrei renderlo un po' più piccolo.
‫Facciamo circa 25.
‫Va bene.
‫Se non l'hai fatto tu, lo sto solo facendo.
‫Quindi la sfera non è così grande.
‫Ora, il penultimo parametro che stiamo passando è per le righe persistenti.
‫Passerò in falso e per la durata invece di 30 secondi userò un punto F
‫negativo.
‫In questo modo otterremo una sfera per un singolo fotogramma, il che va bene, ancora una volta, lo chiameremo
‫nella funzione tick, quindi lo chiameremo ogni fotogramma.
‫Andiamo avanti e compiliamo questo.
‫Ora, di nuovo nell'editor.
‫Se premo play ora, dai un'occhiata.
‫Ho una sfera di debug e viene disegnata nel punto di impatto per la traccia della linea sotto il cursore.
‫Ora possiamo spostarlo sui muri e su altri oggetti e la traccia colpisce questi oggetti perché sono impostati per
‫bloccare il canale di visibilità.
‫Abbastanza fantastico in questo momento.
‫Ho promesso che avremmo discusso del tracciamento complesso rispetto al tracciamento semplice.
‫Ti mostrerò qualcosa mentre giochiamo.
‫Facciamo clic nella finestra in modo da avere il controllo sul palmo della mano.
‫Ora premi il tasto tilde e digita il comando della console mostra collisione.
‫Ora potrebbe non essere così facile da vedere sul mio schermo, ma puoi sicuramente vederlo sul tuo schermo.
‫Notare la collisione per le nostre pedine.
‫Non solo possiamo vedere la capsula, ma possiamo vedere questo volume di collisione attorno al nostro carro armato e alle maglie della torretta.
‫Questa è una semplice collisione.
‫Lascia che ti mostri molto velocemente dove possiamo vedere la semplice collisione.
‫Entrerò in asset e mesh e se faccio doppio clic, diciamo, sulla base del serbatoio qui, osserveremo
‫la complessa collisione.
‫Se faccio clic su questa icona mostra qui in alto e seleziono collisione complessa, posso vedere tutti i poligoni
‫nella collisione complessa e ce ne sono molti.
‫Se faccio nuovamente clic sull'icona mostra e questa volta spunta la casella accanto a Collisione semplice, nota che c'è un
‫altro volume di collisione.
‫Questo è chiamato scafo di collisione e ha una geometria molto inferiore.
‫C'è un numero minore di poligoni con questo volume di collisione.
‫Questo è ciò che il motore fisico utilizza per rilevare la sovrapposizione negli eventi di successo.
‫Se utilizzasse la collisione complessa, richiederebbe molti più calcoli.
‫Questo è il motivo per cui abbiamo volumi di collisione semplici, quindi è molto meglio per le prestazioni ogni volta
‫che si esegue una traccia di linea se si traccia per collisione semplice anziché per collisione complessa.
‫Quindi ora abbiamo il risultato del colpo sotto il cursore.
‫Ci è voluto del lavoro per arrivarci, ma ora ce l'abbiamo e lo abbiamo dimostrato mostrando questa posizione con
‫una sfera di debug.
‫Questo è un bel modo per confermare che il nostro hit di traccia funziona.
‫Quindi ora che sappiamo che sta funzionando, possiamo usare quella posizione per ruotare la torretta sul nostro carro armato.
‫E lo faremo nel prossimo video.
‫Ci vediamo presto.