‫Ciao e Benvenuto.
‫In questa lezione, renderemo un nemico più una minaccia implementando un nodo di ripresa in C++.
‫Entriamo e vediamo come farlo.
‫Quindi una funzionalità che manca chiaramente al nostro albero del comportamento è la capacità di scattare.
‫Quello che idealmente vorrei fare è spostarmi nella posizione del giocatore e poi sparare.
‫Ma prima vogliamo cambiare un po' il modo in cui eseguiamo il movimento.
‫Ci sono un paio di cose che voglio modificare, quindi se seleziono lo spostamento su Node, una cosa che voglio
‫cambiare è il raggio.
‫Non voglio che il nemico venga verso di me, quindi se cambio il raggio accettabile, smetterà
‫di allontanarsi di cinque metri da me.
‫Quindi si fermerà.
‫Dammi una bella distanza di cinque metri.
‫Si avvicina a me, loro vanno e lui si ferma e mi fissa.
‫Ora l'altra cosa che voglio fare è quaggiù nella sezione della lavagna, puoi vedere che c'è un valore di
‫osservazione della lavagna.
‫Se non lo abbiamo controllato, vediamo cosa succede mentre mi muovo.
‫Fondamentalmente e questo era leggermente più ovvio quando avevamo un raggio accettabile più piccolo.
‫Quindi fissiamolo laggiù a cinque e quattro ora.
‫E se premo play, puoi vederlo mentre mi muovo.
‫Va nella mia ultima posizione e solo allora quando l'ha raggiunta, viene aggiornato.
‫Non è quello che vogliamo.
‫Quello che vogliamo è che venga costantemente verso di noi.
‫E se controlli il valore osservato della lavagna, in sostanza quello che sta dicendo è che ogni
‫volta che la posizione di gioco cambia, aggiorneremo dove ci stiamo spostando.
‫Quindi, se vado avanti e premo play e muovi, puoi vedere che mi segue continuamente e aggiorna il suo
‫percorso.
‫Questo è esattamente quello che vogliamo.
‫Quindi ora possiamo cambiare il nostro raggio di accettazione a 500 e diventa meno ovvio.
‫Ma è comunque positivo che abbiamo il nostro valore di lavagna osservato lì.
‫E poi il comportamento che vogliamo è che una volta che arriva nel raggio di noi in questo modo, si fermerà
‫e ci sparerà.
‫Per questo abbiamo bisogno di un nuovo tipo di compiti.
‫Creeremo qui una nuova attività C++?
‫Arriverà ad aggiungere una nuova, nuova classe C++.
‫Quindi andremo a mostrare tutte le classi e cercheremo l'attività beta.
‫Ora, quale vogliamo?
‫Il nodo delle attività beta o la base della lavagna delle attività beta?
‫Bene, in realtà non abbiamo bisogno di usare una chiave perché cercheremo solo di sparare.
‫Questo è tutto ciò che faremo.
‫Premiamo il grilletto della nostra pistola.
‫Tutta la mira verrà eseguita altrove nel nostro albero del comportamento.
‫Quindi apriamo il nodo dell'attività beta, la classe base qui, e chiameremo questa attività Beaty.
‫Sottolineare.
‫Sparare.
‫Andiamo avanti e creiamo quella classe.
‫Quindi finiamo con qualcosa del genere.
‫Quindi vogliamo fare la stessa configurazione.
‫Quindi è una piccola sfida per noi fare lo stesso tipo di configurazione che abbiamo per la nostra lavagna.
‫Cancella valore lavagna.
‫Vogliamo avere un nome.
‫Vogliamo eseguire le note sull'attività, mettere in pausa il video e provare a farlo.
‫Bene.
‫Ben tornato.
‫Quindi era un mini compito.
‫Copierò solo le firme dalla mia chiara valle della lavagna per le riprese, comprese
‫le sezioni pubbliche e protette.
‫Ho intenzione di cambiare il nome del nostro costruttore.
‫Ho intenzione di andare avanti e implementare un costruttore.
‫E cosa dovevamo fare?
‫Dobbiamo impostare il nome del nodo uguale a sparare.
‫È così che lo chiameremo.
‫Quindi torniamo all'intestazione per l'attività di ripresa e proveremo a implementare l'attività di esecuzione ora.
‫E dobbiamo solo richiamare una sorta di copia che dal nostro file Clear Blackboard Values CP
‫e quindi siamo pronti per iniziare l'implementazione.
‫Quindi la prima cosa che dovremo fare qui, diamo un po' più di spazio,
‫è che dovremo impadronirci della nostra pedina.
‫Perché dobbiamo impadronirci della nostra pedina?
‫Bene, diamo un'occhiata al personaggio dello sparatutto, che è una pedina.
‫Ricordi il personaggio sparatutto?
‫Il punto H ha un metodo di ripresa.
‫Questo è ciò che vogliamo chiamare essenzialmente lo stesso che stiamo facendo noi del giocatore.
‫Sta tenendo premuto il pulsante di attivazione e questo chiama questo metodo di tiro.
‫Vogliamo che il ragazzo sia in grado di fare lo stesso.
‫Quando hai l'attività di tiro, tieni premuto il pulsante di attivazione o premi ripetutamente quel pulsante di attivazione in modo
‫che l'attività di esecuzione sia il posto giusto per farlo.
‫Probabilmente restituiremo ciò che qui, perché ricorda, questa azione è solo un colpo.
‫Non è uno scatto continuo.
‫Cosa faremo?
‫Restituiremo il successo del risultato della nota vuota.
‫Se ci riuscissimo tutti.
‫Se ci siamo riusciti perché non abbiamo bisogno di chiamare continuamente tick.
‫Non è necessario che questa attività venga eseguita più a lungo di un singolo frame.
‫E l'altra cosa che dobbiamo fare è prendere possesso, come ho detto, di quella classe di pedoni.
‫Bene, quello che farò è mostrarti come puoi entrare in possesso del controller dell'aria.
‫E dal controller aereo, sappiamo che possiamo chiamare get pedone per ottenere il pedone che era controllato.
‫E sappiamo che possiamo lanciare quella pedina controllata nell'implementazione del nostro personaggio sparatutto.
‫Quindi, come otteniamo il controller aereo da questo?
‫Bene, abbiamo il nostro componente dell'albero del comportamento, che sappiamo essere su un controller aereo.
‫Quindi forse ha qualcosa che possiamo usare se andiamo al componente dell'albero del comportamento e diamo un'occhiata qui
‫per tutti i metodi che potrebbero essere utili.
‫C'è molto qui dentro, ma se cerchiamo il controller, non vediamo nient'altro che forse da qualche parte in una delle
‫sue classi base perché la classe genitore per il componente dell'albero del comportamento d'uso è il componente del tuo
‫cervello.
‫Seguiamo quello per cercare il controller qui.
‫Puoi vedere che c'è una proprietà per questo.
‫C'è un getter?
‫Sì, c'è chiamato get air owner e dovrebbe tornare se ci passiamo sopra e controllo un puntatore.
‫Quindi dovresti essere in grado di usarlo per prendere il pedone, lanciarlo su un personaggio sparatutto e quindi
‫chiamare il metodo di tiro.
‫Quindi questa sarà la tua sfida.
‫La chiamata.
‫Il metodo di tiro, rendilo pubblico, prendi il pedone, lancia la chiamata del pedone, spara e poi provalo nel
‫tuo albero del comportamento.
‫Metti in pausa il video e fallo partire.
‫Bene.
‫Ben tornato.
‫Quindi, prima di tutto, il primo passo è rendere pubblico questo metodo di ripresa perché deve
‫essere chiamato dall'esterno di questa classe.
‫Quindi lo metteremo solo subendo danni, dovremo sparare, dargli un po' di spazio, un po'
‫di respiro.
‫Mi piace lo spazio bianco mi aiuta a vedere, aiutami a pensare.
‫Poi andremo al servizio fotografico di Beatty.
‫Prima di tutto verificheremo che I controller non sia nullo.
‫Altrimenti non possiamo usare l'operatore freccia su di esso.
‫Solo una buona pratica generale per fare questi controlli delle unghie.
‫Quindi, se questo proprietario non è uguale, è uguale a puntatore nullo.
‫Vorremo tornare presto con un fallimento.
‫Quindi questo compito fallirà se non abbiamo un controller aereo.
‫È abbastanza semplice.
‫Quindi posso restituire i risultati del nodo vuoto.
‫Colon.
‫Il colon ha fallito in questo modo.
‫E poi faremo il proprietario, il proprietario del componente, andremo avanti.
‫In effetti, potremmo aver bisogno di includere un capo di file qui.
‫Quindi facciamo un hash include e sarà la struttura di gioco e il controller e se penso, sì, qualsiasi controller dovrebbe fare, ma penso che
‫abbiamo bisogno del controller dell'aria perché questo è il tipo di punti su cui torneremo e poi faremo una
‫freccia e faremo un get -- qui a lamentarmi di qualcosa nella mia testa,
‫un file, forse non ho qualcosa di giusto.
‫Quindi taglio in avanti mi sembra di aver sbagliato.
‫In realtà non è nella struttura del gioco.
‫Hai solo un controller per includerlo.
‫Insegnami per essere così blasé su questo.
‫Quindi eccoci qua.
‫Ora possiamo ottenere il -- dal.
‫E come ho detto, dobbiamo anche fare un cast.
‫Quindi faremo un cast per il tipo di cui avremo bisogno per lanciare la A del personaggio dello sparatutto.
‫Quindi è nella sua forma completa, sparare a un personaggio, sparare, un personaggio.
‫E dovremo controllare anche il risultato di questo.
‫Ma dobbiamo includere il personaggio di Ash Shoots.
‫Quindi l'hash include nella parte superiore il personaggio dello sparatutto pensato in questo modo.
‫E memorizzeremo che in un tipo di puntatore spara il personaggio sarà ancora un personaggio.
‫Quindi lo chiamerò, lo conserveremo lì.
‫Fondamentalmente, dobbiamo assicurarci che neanche il pedone get restituisca perché get pedone potrebbe restituire null se
‫l'occhio non sta attualmente controllando un pedone.
‫Oppure questo cast potrebbe restituire null se il tipo non è un personaggio da otto tiratori che controlla un diverso tipo
‫di pedone.
‫Fortunatamente, questi due vanno abbastanza bene insieme, quindi se provi a lanciare un puntatore nullo, il risultato è solo
‫un puntatore nullo, motivo per cui possiamo farlo.
‫Questi controlli tutti in una riga.
‫Quindi possiamo fare un carattere if.
‫È uguale a puntatore nullo.
‫Allora vogliamo fallire di nuovo.
‫Quindi torna.
‫Risultati del nodo IBT.
‫Colon.
‫Il colon ha fallito in questo modo.
‫E infine, dopo tutti questi controlli, sappiamo di avere un personaggio sparatutto.
‫Dovremmo essere in grado di chiamare, sparare.
‫Quindi personaggio freccia e spara in questo modo.
‫Quindi questo ci permetterà finalmente di sparare.
‫Passiamo al nostro albero del comportamento.
‫E qui vorremo tirare verso il basso per posizionare un nuovo nodo e cercare il nuovo compito di ripresa che
‫abbiamo qui.
‫E non sono sicuro di aver compilato, quindi mi assicurerò che tutto venga compilato di nuovo.
‫E una volta fatto, possiamo andare oltre e premere play e vedere se questo tizio si avvicina e spara, ok?
‫Si lo fa.
‫Sfortunatamente, sta sparando ripetutamente e si sta sparando a un piede.
‫Quindi qualcosa non sta proprio scrivendo proprio lì.
‫Quindi ci sono due cose che vanno storte.
‫Per cominciare, è riuscito a uccidersi con due colpi, e sembra anche che stia riprendendo ogni singolo
‫fotogramma, il che avrebbe senso perché stiamo vedendo il giocatore, ci spostiamo verso di loro
‫e poi sparare è l'ultima azione siamo arrivati, che eseguiremo ripetutamente.
‫Quindi quello che vogliamo fare è in realtà trasformarlo in una sequenza.
‫Quindi trascinerò un nodo qui, creeremo un nodo sequenza e quello che faremo è girare,
‫quindi aspettare, quindi sparare, quindi aspettare e ripetere all'infinito.
‫Quindi spara prima, aspetta un po'.
‫Quindi forse aspettiamo, non so, 1/2 tra gli scatti e poi vorremo ripetere questo, cosa che possiamo
‫fare con un decoratore.
‫Quindi, se faccio clic con il pulsante destro del mouse su Aggiungi decoratore e cerco il decoratore di loop, puoi vedere quante volte vuoi
‫che si ripeta.
‫Si dice tre volte.
‫Non lo vogliamo tre volte.
‫In pratica, vogliamo che si svolga all'infinito fino a quando non abbiamo bisogno di muoverci o dobbiamo perdere di vista il piano.
‫Dobbiamo andare a indagare.
‫Quindi andremo avanti e premiamo play e vediamo se funziona.
‫Viene da me.
‫Spara, spara, spara.
‫Ma in realtà non mi sta picchiando.
‫Puoi vedere che i suoi colpi stanno effettivamente atterrando su se stesso.
‫E affronteremo questo bug in una lezione imminente.
‫Guarda quello?