Driver AI nel gioco di corse


17

Sono curioso di sapere come avrei potuto controllare le auto in un gioco di corse.

Il mio agente AI dovrebbe controllare la sua auto con comandi come "acceleratore su 0,35, volante sterzante su 0,5 a destra, freno su 0,0"? O dovrei piuttosto pre-calcolare una curva su cui si attacca la macchina, e immagini come la rotazione delle ruote anteriori sono solo per rendere tutto coerente? O c'è un altro modo?


4
La strategia "attenersi alla curva ideale" funziona solo fino a quando non vi sono interferenze. Nel momento in cui gli agenti di intelligenza artificiale iniziano a interagire con altre macchine (schivandole o speronando) dovranno improvvisare.
Philipp,

1
Sì, qualcosa di simile ai nodi lungo la pista con sterzo tipo boids.
MichaelHouse

1
Ecco un articolo sull'intelligenza artificiale in Rally 2 di Colin McRae
gre_gor,

@gre_gor, questo è un articolo molto utile, grazie!
dargemir,

Risposte:


16

Possiamo dire che ad un certo livello il gioco sta seguendo un percorso pre-calcolato. Dato che le tracce del gioco di corse sono (di solito) comunque un percorso pre-calcolato.

Anche se stiamo parlando di generare le tracce in modo casuale, il gioco deve aver calcolato la parte corrente delle tracce nel momento in cui l'auto arriva.

Bene, è stato facile. Qualcos'altro al riguardo?

Entrambi, seguendo un percorso pre-calcolato e controllando l'auto in modo sistematico, hanno usi nell'industria dei giochi. La risposta è usare entrambi, in qualche modo.

Prima di tutto, voglio menzionare che "calcolare una curva" può significare due cose:

  • Creazione di funzioni che genereranno la posizione sulla curva, avendo come parametro fino a che punto si desidera interrogare.

  • Creazione di un percorso, inteso come elenco di punti (o istruzioni e altre informazioni di controllo) da seguire.

Il primo può essere utile per la previsione o in alcune simulazioni fisiche. Tuttavia, quando parliamo di controllare un oggetto, quest'ultimo è l'approccio raccomandato.

Nota: per i giochi più vecchi (anni '80) le altre auto preferiscono gli ostacoli in movimento. Erano lì per te per evitarli e superarli. Non stiamo parlando di quelli.


  • Seguire un percorso pre-calcolato: è utile per filmati o scene ripetibili. Ad esempio, in GTA San Andreas l'inseguimento insegue il bersaglio dell'inseguimento e tutte le auto seguono un percorso predefinito (questo assicura che l'obiettivo dell'inseguimento possa evitare il traffico ※). Tuttavia, non appena li perturbate, ricadono nel controllo dell'IA, in questo caso l'IA dovrà trovare il percorso per arrivare a dove dovrebbe seguire il suo normale percorso.

    ※: In effetti, è stato preregistrato. La registrazione e la riproduzione sono state una delle nuove funzionalità del motore di gioco GTA SA.

  • Controllato da AI:

    L'intelligenza artificiale nella sua forma più semplice è una macchina a stati. Verifica lo stato in cui si trova ed esegue alcune azioni a seconda di ciò. Mi riferirò a queste combinazioni di stato e azione come comportamenti. Le azioni non devono corrispondere al gamepad del giocatore. Nemmeno i comportamenti.

    Per un gioco semplice, probabilmente hai bisogno solo di due comportamenti notevoli: 1) se è sui binari, segui il percorso evitando altre macchine e ostacoli e 2) se non è sui binari, torna sui binari.

    In questa fase, non è lontano dal seguire un percorso (le tracce). Tuttavia, poiché i binari non sono in realtà una linea, non stiamo parlando di seguire un percorso, ma di stargli vicino (evitando altre macchine e ostacoli). Ciò significa che l'IA deve risolvere "sterzo, frenata e accelerazione".

    Per un gioco moderno, l'auto sarà anche soggetta a simulazione fisica (per risolvere la collisione e mantenere il realismo). Per questo motivo, ogni iterazione del loop di gioco dell'auto verrà aggiornata in base alla sua velocità e accelerazione, e anche "sterzo, frenata e accelerazione" (modifiche alla velocità) verranno applicati per seguire il comportamento attuale.

    Voglio anche menzionare che i giochi moderni possono avere comportamenti più complessi, ad esempio l'intelligenza artificiale può scegliere di colpire un'altra macchina o bloccarne la strada. In effetti, l'IA può persino scegliere quale applicare in base a una qualche forma di apprendimento automatico, ma sto divagando.

    Infine, considera che può anche essere utile avere un controllo più semplice per le auto AI al di fuori della vista del giocatore. Sia per le prestazioni che per il Rubber Banding (che in questo caso mantiene le auto dell'IA vicine al giocatore per mantenere interessante la gara, può essere considerato come un imbroglio dell'IA quando non si può davvero lasciare indietro qualsiasi avversario).


Per quanto riguarda l'animazione, di solito non è una buona idea simulare la fisica delle ruote in modo indipendente. Se lo fai, potrebbe aggiungere realismo al gioco, ma costerà le prestazioni. Di solito il gioco animerà le ruote in base al comportamento invece di esprimere il comportamento in termini di movimento delle ruote e simulare le conseguenze.

Naturalmente, potrebbe essere necessario considerare ulteriormente qualsiasi cosa le ruote siano in contatto con il terreno. E forse animando la sospensione.


Questa è una risposta meravigliosa, grazie mille.
dargemir,

0

Consiglio vivamente di separare il modello di fisica / stato dell'auto dal controller dell'auto e di fare in modo che l'agente AI e il controller del lettore siano due tipi di controller intercambiabili, con comandi di alto livello come quelli che hai suggerito nella tua domanda.

Questo ha una serie di effetti piacevoli:

  • È possibile implementare ed eseguire il debug del modello di fisica / stato una volta sia per il giocatore che per l'IA
  • Qualsiasi nuova funzionalità del modello fisico / statale si applica immediatamente sia al giocatore che all'IA
  • Le auto del giocatore e dell'IA si comportano in modo coerente in pista, il che aumenta l'equità percepita e effettiva (se si desidera ostacolare i corridori, ovviamente, è possibile farlo modificando i parametri sulle auto)
  • Vari tipi di supporto multiplayer diventano molto più facili da sviluppare.

Questo è un caso particolare di separazione MVC , tra l'altro.


2
Mi piace questa risposta, ma quell'affermazione finale è semplicemente assurda. Rimuovilo e hai ragione da parte mia. Separazione delle preoccupazioni ? - Certamente. Ma MVC non si applica nel contesto della tua risposta completa.
Ingegnere,

1
A parte il fatto che l'aspetto View non è discusso nella domanda o nella risposta, perché pensi che sia assurdo inquadrarlo come MVC?
Russell Borogove,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.