qual è la soluzione standard per l'individuazione di percorsi verso un bersaglio in movimento?


28

Sto lavorando a un gioco 2D RTS come, A * di base funziona perfettamente per spostare un'unità dal punto A al punto B.

Ma ora sto affrontando il problema della ricerca di percorsi continui, come A che attacca un oggetto in movimento B, chiamo A * su ciascun fotogramma una volta che la posizione dell'oggetto B è cambiata sembra inefficiente.

quindi qual è il metodo standard per questo problema?


1
Non esiste un metodo standard.
Kylotan,

3
Non esiste un singolo metodo standard ma c'è molta letteratura sui metodi comuni per risolvere il problema.

Risposte:


17

Da quello che so, potresti dare un'occhiata all'algoritmo D * che sta per "Dynamic A *". Questo algoritmo viene utilizzato per calcolare il pathfinding per l'ambiente dinamico, qui con un target mobile.

Ecco un documento che utilizza D * per spostare la ricerca del percorso target: Moving Target D * Lite


10

Un'opzione è quella di creare un nuovo percorso una volta ogni pochi frame. Se lo hai fatto una o due volte al secondo anziché 60+ volte al secondo, è improbabile che l'utente se ne accorga a meno che non siano entrambi due oggetti in rapido movimento


8

Puoi usare l'approccio "curva del cane" che i cani apparentemente usa quando cacciano qualcuno. Calcolano dove sarà il punto di impatto "in futuro" e vanno dritti in quella posizione.

Un modo approssimativo semplice potrebbe essere qualcosa del genere:

A = NPC

B = Target

T = tempo per raggiungere la posizione B: s (posizione iniziale B: s)

Calcola dove B sarà nel tempo 'T' (se B continua alla stessa velocità / angolo) e vai invece lì.

Questo non è il modo perfetto con il variare della distanza, ma molto più semplice rispetto alla creazione di una soluzione perfetta e molto meglio del semplice tentativo di raggiungere la "B".


3
Non sapevo dei cani. Ho imparato qualcosa oggi!
SteeveDroz,

3

Sono d'accordo con Kylotan che non esiste un metodo standard .

Un metodo che ho visto lavorare è stato quello di assumere che il bersaglio continuasse a muoversi nella stessa direzione e cambiare la posizione dell'obiettivo mentre corri attraverso il tuo algoritmo di ricerca del percorso. Ciò significa che devi tenere due metriche nei tuoi nodi A * (costo e tempo anziché solo costo).

Fare di meglio è molto difficile. A meno che tu non abbia effettivamente conoscenza del percorso incrollabile del bersaglio, stai andando nella terra dell'IA piuttosto difficile perché avrai la seconda ipotesi dell'IA o la simulazione del comportamento del bersaglio per indovinare dove saranno e percorso verso quello. Questo tipo di AI è un gioco AB in tempo reale dalla teoria dei giochi, un'area che non è standard in nessun toolkit di intelligenza artificiale di giochi 3D.


2

Un modo per eseguire il rilevamento dinamico del percorso è fare in modo che l'entità preveda dove sta andando il bersaglio e ci si sposta.

Un modo per farlo è usare una serie di Taylor.

Chiamerò il percorso del bersaglio nel tempo la funzione S (t) dove S è la posizione et è l'ora corrente e l'approssimazione al percorso è A (f) e f è la data in futuro si sta approssimando .

Quindi l'approssimazione più semplice e più stupida è A (f) = 0.

Il prossimo più semplice è A (f) = S (t) dove t è l'ora corrente e f è il futuro. Ciò sta prevedendo che l'obiettivo si ferma semplicemente in posizione.

Il terzo più semplice è A (f) = S '(t) * f + S (t) dove S' è la derivata di S rispetto al tempo. Ciò prevede che l'obiettivo continui a una velocità costante senza accelerazione.

Il quarto più semplice è A (f) = S '' (t) * f ^ 2/2 + S '(t) * f + S (t). Ciò prevede che il bersaglio acceleri a velocità costante come una palla che cade.

So che questo può essere riformulato in termini di cambiamento nel tempo che è probabilmente più conveniente per un gioco. Ora S può essere qualsiasi cosa. Potrebbe essere una coordinata X, potrebbe essere una coordinata Y, potrebbe essere la distanza tra gli oggetti, potrebbe essere un angolo. Inoltre ci sono probabilmente metodi migliori per prevedere il percorso futuro di un oggetto, quindi mi guarderei un po 'in giro.


1

Se il terreno è ragionevolmente aperto e il bersaglio non è troppo lontano dall'inseguitore, è possibile utilizzare il comportamento di sterzata dell'intercettazione. In sostanza, prendi la posizione e la velocità del bersaglio per calcolare una posizione davanti al bersaglio che non è troppo lontana, e non troppo vicina, e guidi l'inseguitore verso quel punto (calcolato a intervalli regolari).

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.