Pathfinding: mesh di navigazione basata su tile


8

Sto sviluppando un RTS basato su piastrelle in tempo reale. Questa è una mappa di esempio:

Carta geografica

Questa mappa è composta da 4 regioni con 256 tessere ciascuna. Le tessere blu rappresentano ostacoli. Le unità possono muoversi nelle otto direzioni standard. Le unità sono legate a tessere; una tessera può contenere un'unità.

Questi sono alcuni esempi dei percorsi ideali che sto cercando. Roba tipica A *:

inserisci qui la descrizione dell'immagine

La mia domanda è: una mesh di navigazione è applicabile a un RTS basato su piastrelle? Ho visto solo le mappe di navigazione utilizzate nei giochi in cui le unità si muovono liberamente e non sono legate a una griglia di tessere. Come sarebbe la mesh di navigazione su questa particolare mappa? Un'immagine di esempio sarebbe eccellente.


Per quello che vale, mi sembra di ricordare di aver sentito che alcune "stranezze" del tracciato di Starcraft I erano dovute alla tardiva decisione di passare dal 2d al 3d isometrico - tutto il codice del tracciato è stato scritto in attesa di terreno 2d!
Raven Dreamer,

Risposte:


10

Sì, le mesh di navigazione sono ancora applicabili ai giochi basati su tessere. Sebbene, sarebbero principalmente usati come ottimizzazione. Ad esempio, ho convertito la parte inferiore sinistra dell'immagine per utilizzare una mesh di navigazione:

inserisci qui la descrizione dell'immagine

In questo caso, ogni quadrato verde sarebbe un nodo di navigazione. Come puoi vedere, questo riduce drasticamente il numero di nodi che A * deve elaborare. Le unità possono quindi semplicemente seguire il percorso verso il centro di ciascuno di questi nodi.

La generazione di questi nodi è un problema diverso. Può essere complesso decidere come formare i nodi. Ci sono alcune domande sul sito in cui potresti trovare alcune idee su come desideri implementarlo:

Suddivisione di un poligono in scatole di dimensioni variabili

Identificazione di modelli quad in una matrice bidimensionale

/programming/20220215/minimum-number-of-rectangles-in-shape-made-from-rectangles

Questa mesh di navigazione può anche essere essenzialmente utilizzata come ricerca di percorsi "primo passaggio". Se viene trovato un percorso attraverso la mesh di navigazione, sai che esiste un percorso. Questo è un test più veloce per vedere se sono collegati due punti.


1
Sto facendo fatica a capire come questo sia superiore al puro A *. In che modo la tua navmesh ottimizzerebbe il calcolo del pathfinding per il percorso verde nella risposta originale, ad esempio?
mario_sunny,

4
Il percorso verde ha 15 nodi, il percorso mesh ha 5. Ciò non include nemmeno il numero di vicoli ciechi che devono essere analizzati quando si trova quel percorso. Il punto della mesh di navigazione non è necessariamente quello di effettuare le rotte più dirette, ma di ridurre la quantità di nodi che A * deve cercare, aumentando così notevolmente la velocità di A *. Esistono strategie per posizionare i nodi nella mesh di navigazione che possono trovare un equilibrio tra percorsi diretti e meno nodi (ad esempio nodi su ogni angolo di tutti gli ostacoli). Ci sono anche ottimizzazioni che possono essere eseguite sul percorso finito.
MichaelHouse

Sto cominciando a capire. Il percorso verde sarebbe diverso con l'ottimizzazione della navmesh? Sembra che tu insinui che l'unità si sposterà al centro di ogni rettangolo mentre si dirige verso l'endpoint. Stai suggerendo che le ottimizzazioni post-A * accorcerebbero il percorso?
mario_sunny,

3
Sì, se si utilizzava il centro di ciascun nodo, il percorso sarebbe diverso. Tuttavia, puoi decidere di usare qualcosa di diverso dal centro (come potresti usare gli angoli di ciascun nodo). Oppure puoi farlo in modo che i tuoi nodi non siano più grandi di quattro quadrati (rendendo meno nodi ma facendo sì che i nodi seguano la geometria più vicino). Oppure puoi eseguire alcune ottimizzazioni sul percorso per essere più diretto dopo averlo trovato. Puoi anche usare la nav-mesh come primo passaggio, quindi utilizzare A * per tracciare ciascun nodo (permettendoti di "tracciare mentre vai", mentre l'unità si sta muovendo, diffondendo l'impatto delle prestazioni nel tempo).
MichaelHouse
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.