Comprensione dei comportamenti dello sterzo cercare

I comportamenti dello sterzo mirano ad aiutare i personaggi autonomi a muoversi in modo realistico, usando forze semplici che vengono combinate per produrre una navigazione improvvisa e realistica intorno all'ambiente dei personaggi. In questo tutorial tratterò la teoria di base dietro il cercare comportamento di guida, così come la sua attuazione.

Le idee dietro questi comportamenti sono state proposte da Craig W. Reynolds; non si basano su complesse strategie che implicano la pianificazione del percorso o calcoli globali, ma utilizzano invece informazioni locali, come le forze dei vicini. Ciò li rende semplici da capire e da implementare, ma ancora in grado di produrre schemi di movimento molto complessi.

Nota: Sebbene questo tutorial sia scritto usando AS3 e Flash, dovresti essere in grado di utilizzare le stesse tecniche e concetti in quasi tutti gli ambienti di sviluppo di giochi. Devi avere una conoscenza di base dei vettori di matematica.


Posizione, velocità e movimento

L'implementazione di tutte le forze coinvolte nei comportamenti di guida può essere ottenuta utilizzando i vettori matematici. Dato che queste forze influenzeranno la velocità e la posizione del personaggio, è un buon approccio usare i vettori per rappresentarli.

Anche se un vettore ha un direzione, verrà ignorato se correlato alla posizione (supponiamo che il vettore posizione stia puntando alla posizione corrente del personaggio).

La figura sopra rappresenta un personaggio posizionato a (x, y) con una velocità (a, b). Il movimento viene calcolato utilizzando l'integrazione di Eulero:

posizione = posizione + velocità

La direzione del vettore di velocità controllerà dove si dirige il personaggio mentre la sua lunghezza (o grandezza) controllerà quanto si sposterà su ogni fotogramma. Maggiore è la lunghezza, più velocemente il personaggio si muove. Il vettore di velocità può essere troncato per garantire che non sia maggiore di un determinato valore, di solito velocità massima. Di seguito è riportato un test che mostra questo approccio.


Muovi il mouse per muovere il bersaglio.

Il quadrato rosso si sta muovendo verso un bersaglio (il cursore del mouse). Questo modello di movimento illustra il cercare comportamento senza eventuali forze di guida applicate finora. La linea verde rappresenta il vettore di velocità, calcolato come segue:

velocity = normalize (target - position) * max_velocity

È importante notare che senza la forza dello sterzo, il personaggio descrive percorsi rettilinei e cambia istantaneamente la sua direzione quando il bersaglio si muove, rendendo così una brusca transizione tra il percorso corrente e quello nuovo.


Forze di calcolo

Se fosse coinvolta solo la forza di velocità, il personaggio seguirà una linea retta definita dalla direzione di quel vettore. Una delle idee sui comportamenti di guida è quella di influenzare il movimento del personaggio aggiungendo forze (chiamate forze di guida). A seconda di quelle forze, il personaggio si sposterà in una o in un'altra direzione.

Per il comportamento di ricerca, l'aggiunta di forze di governo al personaggio ogni fotogramma rende regolare la sua velocità, evitando cambi improvvisi del percorso. Se il bersaglio si muove, il personaggio lo farà gradualmente cambia il suo vettore di velocità, cercando di raggiungere il bersaglio nella sua nuova posizione.

Il comportamento di ricerca coinvolge due forze: velocità desiderata e timone:

Il velocità desiderata è una forza che guida il personaggio verso il suo bersaglio usando il percorso più breve possibile (linea retta tra loro - in precedenza, questa era l'unica forza che agiva sul personaggio). Il timone la forza è il risultato della velocità desiderata sottratta dalla velocità corrente e spinge il personaggio verso l'obiettivo. 

Quelle forze sono calcolate come segue:

desired_velocity = normalize (target - position) * max_velocity steering = desired_velocity - velocity

Aggiunta di forze

Dopo che la forza dello sterzo è stata calcolata, deve essere aggiunta al carattere (sarà aggiunta alla forza di velocità). L'aggiunta della forza di sterzata alla velocità di ogni fotogramma farà sì che il personaggio abbandonerà senza problemi la sua vecchia rotta diritta e si dirigerà verso il bersaglio, descrivendo un cercare il percorso (curva arancione nella figura seguente):

L'aggiunta di queste forze e il calcolo finale della velocità / posizione sono:

sterzo = troncato (sterzo, max_force) sterzata = sterzo / velocità di massa = troncata (velocità + sterzata, max_velocità) posizione = posizione + velocità

La forza sterzante viene troncata per garantire che non superi la quantità di forze consentite che il personaggio può gestire. Anche la forza dello sterzo è divisa per la massa del personaggio, che produce diverse velocità di movimento per diversi personaggi ponderati. Di seguito è riportato un test che mostra il comportamento di ricerca con tutte le forze applicate:


Muovi il mouse per muovere il bersaglio.

Ogni volta che si muove il bersaglio, ogni personaggio velocità desiderata il vettore cambia di conseguenza. Il velocità il vettore, tuttavia, richiede un po 'di tempo per cambiare e ricominciare a puntare verso il bersaglio. Il risultato è una transizione fluida.


Conclusione

I comportamenti di sterzata sono ottimi per creare modelli di movimento realistici. L'idea principale è utilizzare le informazioni locali per calcolare e applicare le forze per creare i comportamenti. Anche se il calcolo è semplice da implementare, è ancora in grado di produrre risultati molto complessi.

Questo tutorial descrive le basi dei comportamenti di guida, spiegando il comportamento di ricerca. Nei prossimi post apprenderemo più comportamenti. Dai un'occhiata al prossimo post: Fuggi e arriva.