‫Ciao e Benvenuto.
‫In questa lezione cercheremo di avere una scelta nei nostri alberi comportamentali in modo tale che io possa
‫far correre un nemico verso di me e se mi perde di vista, viene nella mia ultima posizione nota facendo fondamentalmente
‫due comportamenti un inseguimento e poi Indago sul comportamento.
‫Immergiamoci e vediamo come è realizzabile.
‫Utilizzo degli alberi comportamentali.
‫Quindi, sebbene questo comportamento di pattugliamento sia molto istruttivo, non è proprio il tipo di comportamento che
‫vogliamo implementare.
‫Quello che preferiremmo avere è qualcosa della seguente linea.
‫Quando riusciamo a vedere il giocatore, ci avviciniamo il più possibile a lui.
‫E quando il giocatore scompare, proviamo a spostarci nell'ultima posizione nota del giocatore per
‫trovarlo.
‫E una volta esaurita questa opzione, forse torniamo in un luogo diverso, o forse
‫restiamo lì per ora.
‫Quindi come possiamo raggiungere questo obiettivo?
‫Bene, al momento, non abbiamo modo di raggiungere questo obiettivo con una sequenza di azioni.
‫Dobbiamo fare una scelta in base ai dati che abbiamo a disposizione.
‫Dobbiamo scegliere se possiamo vedere il giocatore o se non possiamo, se abbiamo o meno l'ultima
‫posizione conosciuta del giocatore, quel genere di cose.
‫Quindi, per fare ciò, abbiamo bisogno di un nuovo tipo di nodo nell'albero del comportamento chiamato nota del selettore.
‫Quindi, se facciamo clic con il pulsante destro del mouse e osserviamo i nostri compositi, una delle opzioni è il selettore.
‫Ora il selettore invece della sequenza funziona così.
‫Se hai un sacco di attività sotto il selettore, verrà eseguito fino a quando la prima non avrà esito positivo.
‫E fondamentalmente si aspetta che tutti falliscano finché uno di loro non ci riesce.
‫Ora la sequenza ha fatto il contrario.
‫Li esegue tutti finché uno di essi non si guasta.
‫Allora perché è utile?
‫Perché è utile che il selettore ne esegua uno finché uno di essi non riesce?
‫Perché fondamentalmente vogliamo che scelga la prima opzione praticabile.
‫Ora, il modo in cui lo faremo non è eseguire effettivamente attività sotto il selettore,
‫ma eseguire sequenze sotto il selettore.
‫Quindi, a livello di radice, faremo una nota di selezione.
‫E poi, al di sotto, spostiamo questa sequenza da parte e creiamo altre sequenze.
‫Avremo una sequenza qui.
‫E quello che possiamo fare è rinominare la sequenza da sequenza a qualcosa come Chase.
‫E poi possiamo aggiungere un'altra sequenza qui, che sarà lungo le linee di indagine.
‫E questi sono fondamentalmente i nostri due comportamenti tra i quali vogliamo poter scegliere.
‫E per farli fallire, possiamo aggiungere cose ai nodi chiamati decoratori.
‫Quindi, se fai clic con il pulsante destro del mouse su un nodo e vai su Aggiungi decoratore, puoi vedere qui ci sono un sacco di opzioni qui.
‫E sostanzialmente cambiano il modo in cui funziona questo nodo.
‫Quindi possono farlo in diversi modi.
‫Ad esempio, abbiamo questo ciclo condizionale che ti consente di ripetere tutte le azioni nella sequenza
‫tutte le volte che questo condizionale è corretto.
‫Abbiamo altre cose qui, come un controllo del codice, che riguarda la visibilità e altre cose così belle.
‫Abbiamo solo un ciclo puro.
‫Abbiamo un limite di tempo.
‫Quindi questo è solo un possibile che possiamo rimanere all'interno di questa sequenza solo per un certo periodo di tempo.
‫Fondamentalmente molte cose che modificano il comportamento di questa sequenza.
‫Ma quella che ci interessa è la lavagna, perché questa è una condizione di lavagna.
‫E come puoi vedere dalla scritta sottostante, l'impostazione predefinita è qualcosa sulla falsariga di questo atto
‫personale è impostato?
‫E se questo non è impostato, automaticamente questo nodo e tutto ciò che si trova al di sotto falliranno, il che
‫significa che il nostro selettore passerà all'opzione due, che è investigare.
‫Quindi, in questo caso, vogliamo davvero cambiarlo.
‫Vogliamo cambiare il modo in cui funziona.
‫Quindi, la posizione del nostro giocatore, vogliamo che sia tale da essere impostata solo quando il giocatore è visibile.
‫E poi vogliamo aggiungere di nuovo una nuova variabile qui, un vettore che sarà l'ultima posizione conosciuta del giocatore
‫e l'ultima posizione conosciuta del giocatore quando il giocatore sarà visibile sarà la stessa.
‫Ma una volta che il giocatore diventa invisibile, la posizione del giocatore viene annullata.
‫E l'ultima posizione conosciuta del giocatore è dove vorremmo andare.
‫Quindi possiamo farlo andando alla nostra condizione di base della lavagna e semplicemente modificandola in modo che la
‫query sia impostata su Sì.
‫Ma la cosa che vogliamo essere è la posizione del giocatore.
‫Quindi, se la posizione di gioco è impostata, daremo la caccia e daremo Chase facendo
‫fondamentalmente solo una mossa e ci sposteremo nella posizione del giocatore come.
‫Quindi ora non stiamo facendo molto altro nella sequenza.
‫Quindi, in realtà, potresti mettere in movimento anche questa condizione di lavagna.
‫Ma poiché potremmo voler fare altre cose come le riprese, la lascerò come sequenza per
‫ora.
‫Allora abbiamo questa indagine.
‫Fondamentalmente anche Investigate farà una mossa, ma invece di spostarsi nella posizione
‫del giocatore, si sposterà nell'ultima posizione conosciuta del giocatore.
‫E puoi vedere che non abbiamo una condizione su questo perché questo cade se questa condizione fallisce.
‫Una cosa importante da notare su queste condizioni di lavagna è che per impostazione predefinita, una volta
‫presa la decisione di avviare l'esecuzione di questo nodo, non lo valuteremo nuovamente.
‫Quindi, se per qualche motivo perdiamo di vista il giocatore mentre ci spostiamo nella posizione di quel giocatore,
‫continueremo a cercare di arrivarci.
‫Quindi, se volessimo essere in grado di interrompere l'esecuzione di questa nota, allora c'è un'opzione per quello.
‫Se vai al controllo del flusso, ci sono gli osservatori di notifica e c'è sotto di esso.
‫Observer interrompe al momento impostato su nessuno.
‫Ma puoi scegliere tra un paio di opzioni.
‫Puoi impostarlo su auto.
‫Quindi questo sta dicendo se questa condizione diventa improvvisamente falsa, allora smetti di fare qualsiasi cosa tu stia facendo e rivaluta
‫il tuo selettore e vedi.
‫Forse ora dobbiamo fare la nota investigativa.
‫L'altra opzione qui ha una priorità più bassa e puoi vedere che è cambiato ciò che è evidenziato qui.
‫Sta dicendo che se improvvisamente questa condizione di lavagna diventasse vera, interrompi qualsiasi altra cosa stavamo facendo e
‫inizia a eseguire questa condizione di inseguimento.
‫E poi l'ultima opzione è entrambe.
‫E questo è quello che vogliamo.
‫Fondamentalmente, sta dicendo che questa condizione basata sulla lavagna, se diventa vera, iniziamo immediatamente a
‫eseguire la sequenza.
‫Se diventa falso, smettiamo di eseguirlo immediatamente o interrompiamo l'esecuzione di qualsiasi altra cosa stava succedendo.
‫Fondamentalmente vogliamo solo andare sempre e fare qualunque percorso sia dettato da questa condizione di lavagna.
‫Quindi si spera che abbia senso che i rapporti dell'osservatore fermino le cose in azione, altrimenti
‫aspetterà fino al termine dell'azione prima di rivalutare.
‫Quindi, davvero, ora vogliamo andare avanti e implementare la nostra ultima posizione nota e la posizione di riproduzione perché al momento, se
‫andiamo al nostro C++ e ci diamo un po' più di spazio, allora puoi vedere che stiamo solo impostando
‫questo posizione di riproduzione in Inizia la riproduzione.
‫Idealmente, lo faremmo ogni volta che abbiamo la linea di vista del nostro pool di giocatori, e quindi possiamo effettivamente decommentare
‫il nostro codice di linea di vista qui.
‫E probabilmente vogliamo decommentare anche il codice else.
‫Ma in questo caso non schiariremo la messa a fuoco e fermeremo il movimento direttamente.
‫Posso andare avanti e rimuoverli completamente perché.
‫Non è così che stiamo facendo le cose in questo momento.
‫Invece, quello che vogliamo fare, se rimuovo il codice, è che vogliamo essere qui a impostare la posizione del
‫giocatore.
‫Vogliamo anche impostare l'ultima posizione conosciuta lì.
‫E nel resto vogliamo cancellare la posizione del giocatore.
‫Ora, per fare ciò, abbiamo una funzione a nostra disposizione, che è invece del valore impostato come
‫vettore, se andiamo avanti e apriamo il nostro componente lavagna punto h, c'è un valore chiaro.
‫E questo prende solo il nome f non ha bisogno di prendere un tipo o altro o perché stiamo
‫semplicemente cancellando completamente qualsiasi cosa fosse in quella variabile.
‫Quindi qui ho una sfida per te per compilare il nostro segno di spunta.
‫Imposta le due variabili quando è in linea di vista.
‫Fondamentalmente compila questo primo bit dell'istruzione F e poi cancella la posizione del giocatore quando abbiamo l'altro.
‫Quindi, quando perdiamo la visuale, non abbiamo più un luogo di gioco.
‫Riduci la velocità del nemico che si trova nel mondo in modo da poterlo allontanare più facilmente.
‫E poi controlla la funzionalità, controlla che sei in grado di nasconderti dietro un angolo e che vada nell'ultima
‫posizione nota per cercare di trovarti.
‫Metti in pausa il video e prova a farlo.
‫Bene.
‫Ben tornato.
‫Quindi proviamoci.
‫Prima di tutto, stiamo impostando la posizione di riproduzione.
‫Lo sposterò fuori dall'inizio del gioco e lo sposterò invece qui.
‫Quindi, impostando la posizione del giocatore su, dobbiamo portare il giocatore qui e riprenderlo.
‫Quindi decommenterò quella riga.
‫E poi stiamo facendo esattamente la stessa cosa, esattamente la stessa riga di codice per la nostra ultima posizione conosciuta del
‫giocatore qui.
‫Quindi andiamo alla nostra lavagna e assicuriamoci di copiarla in modo da ottenere esattamente lo stesso nome e quindi
‫vogliamo solo chiarire che l'ultima cosa è cancellare la posizione del nostro giocatore qui.
‫Quindi sarà un valore chiaro e prenderà questa posizione del lettore di testo come il valore che
‫cercheremo di cancellare alla fine.
‫E possiamo andare avanti e compilare e vedere se funziona.
‫Mentre la compilazione ha avuto successo.
‫L'altra cosa che ho detto di fare per semplificare il debug è stata di selezionare il
‫nemico e possiamo cambiare la loro velocità scendendo alle loro componenti di movimento e trovando la camminata e trovando la loro velocità.
‫Quindi la velocità massima di camminata è 600 qui.
‫Riduciamolo a 400 così possiamo facilmente allontanarci da loro.
‫Cammineranno un po' lentamente e andranno avanti e giocheranno.
‫Stanno camminando verso un lento.
‫Possiamo scappare.
‫Ci nascondiamo dietro un angolo ed eccoli qui.
‫Vieni a cercarci ogni volta.
‫Ma si spera che se ci nascondiamo dietro due angoli, non saranno in grado di trovarci.
‫Quindi mi nascondo lì, mi nascondo qui, mi nascondo qui.
‫E andrà a indagare nell'ultimo luogo conosciuto, vedete, ha appena fatto capolino
‫da dietro l'angolo, ma poi è bloccato lì perché non sa cosa fare.
‫E se dovessimo dare un'occhiata al nostro albero del comportamento e mettere questo da una parte e il gioco
‫dall'altra e darmi un po' di spazio.
‫Quindi, se diamo un'occhiata all'albero del comportamento, possiamo vedere che è una specie di jazz da queste parti perché
‫non può fare nessuno dei due.
‫Sta cercando di spostarsi nell'ultima posizione nota che sta riuscendo.
‫Quindi sta diventando un po' bloccato qui.
‫Ma se vengo in vista, puoi vedere che si sta muovendo verso di me.
‫Se mi perde di vista, passa alla condizione investigativa.
‫Quindi perdi di vista.
‫Indagherà.
‫E poi viene e mi vede e poi torna a darmi la caccia.
‫Quindi questo comportamento sta effettivamente funzionando.
‫Ora possiamo scegliere tra cercare di inseguire e cercare di indagare sulla base di questo comportamento da
‫lavagna.
‫Cambiamo semplicemente il nome di questa lavagna in behavior qui per vedere la riproduzione di un punto interrogativo.
‫Quindi sarà molto più facile da leggere.
‫Ora abbiamo questo selettore che può vedere il gioco, quindi dovremmo inseguirlo, altrimenti dovremmo
‫indagare e possiamo eliminare questa sequenza qui perché non è più in uso.
‫Quindi si spera che ora tu abbia una migliore comprensione di come gli alberi del comportamento
‫possono essere collegati tra loro per creare scelte e sequenze e mettere insieme molte attività per creare comportamenti più complessi davvero facilmente.
‫Nella prossima lezione, esamineremo come possiamo creare le nostre attività personalizzate in C++ in modo da
‫poter ottenere alcune azioni di ripresa.
‫Ci vediamo nel prossimo video.