Come faccio a far muovere gli agenti di intelligenza artificiale lungo una curva?


12

Attualmente il mio framework AI di base ha agenti che si muovono lungo un percorso frastagliato costituito da una serie di punti.

percorso di navigazione

Lo fanno semplicemente spostando la loro posizione da un punto all'altro. Quando raggiungono il punto successivo si spostano verso il successivo e così via. Come posso cambiarlo in modo che si muovano senza intoppi lungo una versione curva del percorso e come posso generare la curva?


come scelgono il punto successivo?
FxIII,

@FxIII scusa non ho visto prima questo commento - vuoi dire come hanno scelto un nuovo target di ricerca o come hanno scelto il punto successivo nella ricerca?
SirYakalot,

Risposte:


4

Stai cercando una sorta di smussamento del percorso. Ovviamente, come ha sottolineato bummzack, vuoi anche assicurarti che qualsiasi percorso che si svolga esegua dei movimenti legali per i tuoi agenti.

Questo articolo di Gamasutra spiega praticamente tutto ciò che devi sapere, tra cui smussamento del percorso, curve legali e algoritmi di svolta realistici e fluidi.

Un'altra alternativa, che è leggermente più semplice, è utilizzare un comportamento di ricerca con un piccolo cerchio / sfera di delimitazione per verificare se l'agente si trova o si avvicina al punto successivo del percorso.


7

Dato che conosci già i tuoi punti di controllo, devi solo aggiornare il tuo codice di interpolazione per utilizzare un algoritmo per la curvatura (Hermite o Cosine, ad esempio).

Questi siti offrono un'ottima spiegazione e un codice di esempio che dovrebbe iniziare:

Metodi di interpolazione Paul Bourke

Sol :: Tutorials - Trucchi di interpolazione


Bene, e se la curva generata improvvisamente colpisce un ostacolo?
Bummzack,

Questo è solo per il movimento degli agenti, per frame. Lo stesso algoritmo di rilevamento delle collisioni si applicherebbe comunque. Quando viene rilevata una collisione, modificare i punti di controllo per evitare l'oggetto (difficile) o iniziare temporaneamente a utilizzare un altro algoritmo di movimento.
Doug.McFarlane,

@bummzack è un buon punto, e la risposta è usare una mesh di navigazione e uniformare le curve di conseguenza, tuttavia per ora ho intenzione di farlo funzionare con un semplice grafico di navigazione e quindi lo risolverò solo levigando i percorsi un po '.
SirYakalot,

@bummzack: aggiungi alcuni comportamenti di guida per evitare gli ostacoli in cima all'algoritmo di generazione del percorso curvo.
imre

0

Ho intenzione di andare contro il grano qui e suggerire che, invece di pre-generare le tue curve, gestiscilo solo fotogramma per fotogramma, usando (ad esempio) la stessa logica che useresti per creare un homing -missile .

Questo sarà molto più semplice e probabilmente più realistico perché non hai bisogno di casi speciali per quando ci sono pareti tra due punti: gestisci il rilevamento delle collisioni come al solito.

Il rovescio della medaglia è che il movimento sembrerà non ottimale. L'oggetto prenderà sempre il percorso più diretto da un waypoint al successivo, il che significa che, a differenza di una spline, non inizierà a girare verso il waypoint 3 fino a quando non avrà già superato il waypoint 2. A seconda della situazione, questo può o meno essere riparabile regolando i tuoi waypoint (se è persino un problema).


1
Questo sarebbe essenzialmente un comportamento di Seek che ho suggerito.
Ray Dey,

0

Il path finder dovrebbe darti il ​​percorso e non dovresti modificarlo. Credo che sia possibile modificare l'algoritmo di ricerca del percorso per tenere conto del fatto che il percorso con curve brusche viene scritto rispetto a quelle con curve morbide come già fa con il percorso lungo rispetto a quelle corte.

Pubblicherò qui una soluzione se riesco a trovare un momento per pensarci a fondo, ma penso che questa sia la strada da percorrere.

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.