Come eseguire il pathfinding di Starcraft?


8

Ho cercato di capire come implementare qualcosa come il pathfinding in Starcraft 2. Non sto cercando tutte le funzionalità sofisticate come floccaggio, accodamento, ecc. In effetti mi piace come in Starcraft 1 le unità interferirebbero con ciascuna altro. Ma voglio un cercatore di percorsi migliore di quello usato in Starcraft 1.

Dalle ricerche di Google che ho fatto, le varie risposte hanno a che fare con A * su una mesh di navigazione e / o con una sorta di "grafico di visibilità". Ma ho ottenuto risposte un po 'contrastanti o poco chiare su cosa avrei dovuto fare.

Una cosa di cui ho letto ha a che fare con il fare A * sopra i vertici di una mesh triangolare (la mesh di navigazione). E poi in qualche modo "raddrizzare il percorso" che non so come fare. Ma questo non garantisce l'ottimalità, giusto?

Un'altra domanda che ho avuto è: come fa il pathcraft di Starcraft 2 a gestire il fatto che le unità sono dischi con un raggio finito e non punti quando hanno a che fare con gli angoli? E come affrontare ostacoli dinamici come unità inattive o anche altre unità in movimento.

Sto cercando una spiegazione dettagliata e grintosa e non le generiche panoramiche di altissimo livello tipiche dei risultati di ricerca.

Se è importante, ho già esaminato le note di Amit sul Path-Finding . Ho sentito parlare ma non ho letto Geometria computazionale: algoritmi e applicazioni . E un post sul blog su una presentazione di navigazione AI al GDC 2011 menzionava che Starcraft 2 utilizza una triangolazione delaunay vincolata per una navmesh. Sebbene il post del blog menzioni Boids Steering e "analisi degli orizzonti", non menziona esattamente come viene svolto il pathfinding principale sulla navmesh.


altre unità vengono semplicemente allontanate, le vedrai urtarsi l'una contro l'altra e scivolare l'una verso l'altra mentre provano a raggiungere il punto successivo
maniaco del cricchetto

3
Penso che alla maggior parte delle tue domande verrà data risposta se dai un'occhiata alla relativa colonna sulla destra. Ad esempio: gamedev.stackexchange.com/questions/20392/… gamedev.stackexchange.com/questions/54361/… gamedev.stackexchange.com/questions/28041/… . Fondamentalmente, un po 'più di ricerca dovrebbe chiarire le cose per te.
MichaelHouse

Risposte:


10

Se hai Starcraft 2 installato, apri l' editor della mappa e attiva il pathfinding . Sarai in grado di vedere come è costruita la maglia del nav mentre posizioni edifici e altri ostacoli intorno.

In effetti mi piace come in Starcraft 1 le unità interferiscano l'una con l'altra. Ma voglio un cercatore di percorsi migliore di quello usato in Starcraft 1.

Non dovrebbe essere un problema: la ricerca del percorso di Starcraft 1 era sciocca. Ne parla questo post di uno dei programmatori.

Una cosa di cui ho letto ha a che fare con A * sui vertici di una maglia triangolare (la maglia di navigazione). E poi in qualche modo "raddrizzare il percorso" che non so come fare. Ma questo non garantisce l'ottimalità, giusto?

Si tratta di rendere l'IA non stupida più che ottimale. Le tue unità finiscono con un movimento a zig-zag tra i nodi se non applichi un po 'di smoothing.

Quando esegui la pianificazione del percorso, avrai una fase di perfezionamento in cui guardi quali nodi devono attraversare l'unità per raggiungere il loro obiettivo, quindi inizi a eliminare nodi in eccesso nel mezzo del percorso che non abbiamo bisogno di seguire, cioè possiamo passare direttamente dal nodo A al nodo C attraverso B senza collisioni statiche, quindi ignoriamo completamente B.

Questo finisce per raddrizzare il percorso.

Sto cercando una spiegazione dettagliata e grintosa e non le generiche panoramiche di altissimo livello tipiche dei risultati di ricerca.

Se vuoi una spiegazione solida, questa è già ben descritta nei libri (anche con il codice di gioco funzionante). Quindi, se hai dei soldi da bruciare, dai un'occhiata a Programmazione AI per esempio e / o Intelligenza artificiale per giochi . Entrambi discutono questi argomenti in modo approfondito.

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.