Alla ricerca di una buona tecnica per il movimento dei personaggi nel gioco hack & slash


51

Sto realizzando un gioco di hack & slash e voglio che i miei personaggi si muovano come ad esempio in Torchlight, Diablo, ecc. Attualmente generi gruppi di nodi per tutte le aree percorribili di un piano. Quando clicco da qualche parte, il giocatore passa attraverso il percorso interpolato dei nodi. Questo non sembra molto naturale. Il giocatore si muove come un robot. I nemici usano anche questo sistema di nodi per il movimento e condividono lo stesso problema, ma ho un altro problema con loro. Quando i nemici rilevano il giocatore, vanno da lui per un percorso più breve. A volte usano lo stesso percorso e si allineano al giocatore invece di circondarlo. Non so come fare in modo che i nemici scelgano percorsi diversi e circondino il giocatore. Sai come posso risolvere questo problema? Forse dovrei usare un approccio diverso per il movimento del personaggio?


La mia tecnica attuale:

inserisci qui la descrizione dell'immagine


Schermata della torcia:inserisci qui la descrizione dell'immagine

---AGGIORNARE---

Voglio sapere come affrontare queste situazioni:

Situazione 1, ho obstalces dinamici / statici sulla mia strada

inserisci qui la descrizione dell'immagine

Situazione 2, i nemici hanno il percorso sam verso il giocatore (entra in coda per combattere con noi) inserisci qui la descrizione dell'immagine


10
+1 per diagrammi e schermate (e una buona domanda). Sempre utile.
L'anatra comunista

Questa è una domanda fantastica (+1) per la quale spero che ci saranno molte discussioni e suggerimenti su diversi modi per affrontare questa sfida (influenze randomizzate per modificare le rotte, AI, ecc.).
Randolf Richardson,

1
Trovo buona pratica utilizzare un sistema di punteggio quando si crea un'intelligenza artificiale. A seconda del punteggio di ciascun nemico (tempo per raggiungere il giocatore, ad esempio), puoi dare loro un comportamento specifico. Ad esempio, se 8 mob sono il massimo che può attaccare il giocatore, quelli che hanno un punteggio più alto dei primi otto possono consapevolmente cercare di trovare un percorso più lungo verso il giocatore, rendendolo più intelligente.
Jonathan Connell,

Sto ancora cercando una risposta, come posso affrontare obstalces (dinamico / statico) su nav mesh? , Non posso usare
Recast

Risposte:


24

Comportamenti di guida in combinazione con una struttura di dati di navigazione .

Esistono diversi modi per farlo, ma questo è il concetto di base. Potrebbe essere più semplice utilizzare una mesh di navigazione in modo da poter applicare l'individuazione del percorso all'interno di ciascuna sezione convessa.

Se sei irremovibile nel mantenere un grafico, puoi utilizzare un comportamento di ricerca per ciascun nodo nel percorso, piuttosto che seguire rigidamente un percorso da nodo a nodo.

Un altro metodo che potresti utilizzare è Path Smoothing ma tieni presente che questo è abbastanza costoso dal punto di vista computazionale.

Spero che aiuti.

MODIFICARE:

Per aiutarti a risolvere i tuoi problemi di evitamento degli ostacoli, usa una sorta di Evitamento degli ostacoli .


Grazie per la risposta, sai come posso generare mesh di navigazione? O c'è un altro modo per farlo? La mia mappa è creata con pezzi di pavimento senza soluzione di continuità (quadretti / triangoli).
piotrek,

1
Puoi sempre utilizzare Recast ( code.google.com/p/recastnavigation ) per generare una mesh di navigazione. Devi solo dargli una "zuppa di triangoli" (un gruppo di poligoni) e lo genererà per te.
Ray Dey,

Sono l'unico che incontra questo, ma il link: ai-blog.net/archives/000152.html è morto. In realtà non riesco ad accedere a www.ai-blog.net
123 il

3

Se preferisci rimanere con un nodegraph piuttosto che passare a una mesh nav come altri hanno suggerito, allora puoi risolvere il problema "schierare il giocatore invece di circondarlo" assegnando a ciascun nemico l'attacco da una determinata direzione.

Ci sono molti modi per farlo, ma di solito uso un sistema "token" per assegnare direzioni uniche ai mostri, in cui l'oggetto giocatore possiede un token per ogni direzione (nord, nord-est, est, ecc.). Quando un nemico vuole raggiungere il giocatore, deve prima acquisire un gettone da lui. La direzione specificata dal token indica al mostro su quale lato del giocatore è autorizzato a trovare il percorso. Poiché il giocatore ha un solo gettone per ogni direzione e i mostri hanno bisogno di un gettone prima di poter attaccare, più mostri non cercheranno tutti di seguire lo stesso lato del giocatore, il che dovrebbe spezzare un po 'i loro percorsi.

Inoltre, potresti voler applicare una piccola penalità ai nodi durante il processo di ricerca dei percorsi, per incoraggiare i mostri ad avvicinarsi da una direzione che corrisponde al token che hanno. (Cioè, se un mostro ha il token che gli consente di attaccare da est, quindi allo scopo di determinare il "percorso più breve" per quel mostro, tratta tutti i nodi del percorso che sono nord / ovest / sud del giocatore come se sono diversi nodi, anziché solo uno). Questo renderà i mostri separati più velocemente e proverà ad affiancare il giocatore, invece di marciare verso il giocatore in file singolo e diffondersi solo all'ultimo passaggio.


2

Fondamentalmente per i nemici quello che vuoi fare è fare il tracciamento a livello macro (pensa a generare aree convesse e percorso verso l'area in cui si trova il giocatore), e fai alcuni comportamenti di guida stile boid a livello micro (una volta che sei vicino al giocatore).

Ecco un esempio di comportamento boid: http://www.red3d.com/cwr/boids/

Per il giocatore penso che la fiaccolata faccia il pathfinding su una mesh nav per il punto in cui si fa clic / trascina, e funziona abbastanza bene. Può sembrare un po 'più disconnesso rispetto al controllo diretto, ma porta a risultati migliori per il giocatore.


Ma, ad esempio, con le scale? Il nemico può attaccarmi anche lì, trasformarlo in un'altra maglia nav?
piotrek,

Dovrebbe essere parte della maglia del nav, essendo la sua forma convessa.
Tetrad,

1
In alternativa, puoi continuare a utilizzare il tuo percorso punto a punto e ricadere sui comportamenti di guida basati sulla fisica quando ti avvicini.
Tetrad,

Come posso gestire gli obstalces dinamici sulle mesh di navigazione?
piotrek,

1
Ecco un post sul blog su come la rifusione sta lavorando per gestirlo: digestingduck.blogspot.com/2011/03/… .
Tetrad,

1

c'è un algoritmo chiamato rrt che viene utilizzato per il problema di pathfinding del mondo reale. la superficie su cui il tuo eroe (o nemici) può camminare è un input insieme alla suface che gli oggetti possono muovere e usando un algoritmo di ottimizzazione trova un percorso verso la tua destinazione. per quanto ne so questo algoritmo è molto utilizzato nei campionati di robocup. è veloce, trova il percorso più breve ed evita collisioni e curve strette. puoi usare questo powerpoint show per capire come genera il percorso.


dopo un altro aspetto sembra che la presentazione che ho fornito dica semplicemente cosa fa rrt e suggerisce anche un nuovo approch, che in alcuni casi sostiene di funzionare meglio, e ha suggerito che l'algoritmo per il pathfinding dei giochi RTS spera che ti possa aiutare.
Ali1S232

0

Per rendere i percorsi di tracciamento dei percorsi più "realistici", ti suggerisco di leggere l'articolo sull'aspetto naturale A * in Game Programming Gems Vol.1

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.