Come gestire il percorso e il movimento delle entità in un grande mondo in rete?


12

inserisci qui la descrizione dell'immagineConsiderando l'immagine sopra con le tessere divise in scatole 32x32, ho un'entità che è contrassegnata come "aggro" giocatori vicini che si avvicinano ad essa. Vorrei che questo mostro inseguisse idealmente il giocatore (e continuasse a inseguire il giocatore per un po '). Attualmente, il mio unico movimento è un semplice interpolatore per entità remote e questo funziona perché gli spazi tra gli aggiornamenti di movimento sono piuttosto piccoli.

Non posso semplicemente dire al cliente che il mostro vuole spostarsi nella posizione in cui si trova, poiché ciò farà muovere l'entità molto più velocemente di quanto dovrebbe (questo può probabilmente essere risolto usando un po 'di matematica per l'interpolazione co -efficace) ma, soprattutto, non sembra realistico e può tagliare le pareti! Non voglio simulare l'intero movimento sul server se può essere evitato ... anche se immagino di poterlo fare, ma ciò non risolve ancora il problema del clipping. Sospetto che la soluzione comporti un po 'di ricerca del percorso e l'invio di aggiornamenti periodici al nodo del client e la possibilità di simulare il movimento, ma non sono sicuro.

Grazie!

Risposte:


9

Per un semplice inizio è possibile implementare comportamenti di guida . In particolare cercare comportamenti . inserisci qui la descrizione dell'immagine

Oltre a cercare i personaggi dovrebbe usare l'evitamento per allontanarsi dagli ostacoli .

inserisci qui la descrizione dell'immagine

Una volta che hai funzionato quegli aspetti, puoi implementare un seguito più intelligente. Ciò include la ricerca del percorso. Ora invece di sterzare verso i nemici, i nemici si dirigeranno verso ciascun nodo sul sentiero che li porta al loro obiettivo.

Una volta che il nemico si "avvicina" abbastanza, puoi passare a comportamenti completamente sterzanti. Dal momento che sono meno costosi della ricerca di percorsi e otterrai risultati buoni a distanza ravvicinata.

Lo sterzo ti permetterà anche di definire le massime velocità di virata e le massime velocità per i nemici.

Lo sterzo può essere gestito sul client con aggiornamenti periodici dal server per assicurarsi che siano ancora in pista.


Ciò significherebbe simulare anche il comportamento dello sterzo sul server o posso logicamente "agganciare" l'entità lungo il percorso? Non ho bisogno di un'enorme precauzione.
Vaughan Hilts,

Lo sterzo da solo dovrebbe essere simulato (non è molto pesante però). Tuttavia, la direzione verso waypoint potrebbe essere aggiornata senza simulazione. Assicurati semplicemente che il cliente si trovi nel raggio del waypoint "corrente" e stia dirigendosi verso il waypoint corretto come "successivo". Ciò comporterebbe qualche schiocco se l'entità fosse fuori strada e improvvisamente aggiornata.
MichaelHouse

+1 per la grande risposta. Grazie per avermi salvato diverse ore.
Md Mahbubur Rahman,

1

Non posso semplicemente dire al cliente che il mostro vuole spostarsi nella posizione in cui si trova, poiché ciò farà muovere l'entità molto più velocemente di quanto dovrebbe (questo può probabilmente essere risolto usando un po 'di matematica per l'interpolazione co -efficent)

In realtà questo è semplice da fare. La direzione del movimento sarà la posizione target meno la posizione corrente. Tutto quello che devi fare è ridimensionare quel vettore fino alla velocità di movimento che desideri effettivamente. Ripeti ogni fotogramma.

ma soprattutto non sembra realistico e può tagliare le pareti! Non voglio simulare l'intero movimento sul server se può essere evitato ...

Devi simulare il movimento sul server. In quale altro modo saprai che tutti i giocatori vedono lo stesso comportamento?

Avrai bisogno di alcune indicazioni di base. A * è lo standard. È possibile calcolare un percorso verso l'obiettivo e quindi seguire quel percorso è semplicemente un caso di impostazione dei vettori di movimento come sopra. (Oppure puoi usare i comportamenti di guida come nella risposta di Byte56, che è essenzialmente la stessa cosa con alcuni extra aggiunti.)

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.