A giudicare da ciò che @davidluzgouveia ha commentato sul post di Anonymly, farò apparire il mio progetto. Il percorso e la ricerca del percorso sono tuttavia molto diversi. La ricerca del percorso è più di ciò che anonimamente pubblicava, e per la ricerca del percorso guarderei all'algoritmo di Dijkstra. Per il percorso che segue uso interamente il mio motore di fisica scelto. Il modo in cui l'ho impostato è che ogni posizione in cui cammina una classe di unità, è impostata nella sua sottoclasse di tracciamento tramite offset 2D, sì, sono 2D e non 3D, questo è dovuto al modo in cui ho impostato la mia fisica nel mio gioco .
Spiegazione 3D:
ogni unità ha un solo collettore principale impostato esclusivamente per la collisione con il terreno e gli oggetti del mondo. È una forma a capsula e ha un raggio e un'altezza programmaticamente parlando. È costruito al centro del modello e dovrebbe estendersi appena oltre la parte anteriore e superiore del modello. Ma ho anche un offset di superficie per quanto è lontano da terra in ogni momento, e un galleggiante di quanto è permesso scivolare giù prima di rimbalzare leggermente, alla volta. Sembra che stia applicando una sorta di soluzione sbagliata per un problema di collisione del terreno, ma ho le mie ragioni.
Ad ogni modo, dovresti applicare forza a questo oggetto capsula e dovrebbe rimanere sempre sospeso sopra il terreno. Questo non vuol dire che non può andare più in alto, solo che non può andare più in basso. Il motivo per cui deve rimanere sospeso (nel mio caso) è perché in un corpo rigido e un motore fisico ragdoll, le gambe delle mie unità sono animate proceduralmente. Quindi applicando una semplice forza alla capsula, le gambe della mia entità si riposizioneranno da sole. Avranno anche le loro applicazioni di gravità separate! Ciò che fa è che se il mio personaggio è inclinato, un piede può trovarsi ad un'altezza inferiore rispetto all'altro.
Questo è esattamente come dovresti farlo. A giudicare da ciò che stai chiedendo è. Se vuoi tralasciare alcune funzionalità, ovviamente va bene, soprattutto se si tratta di un RTS o FPS e nessuno vedrà mai i piedi delle unità o si preoccuperà comunque. Ma in generale, l'unità dovrebbe avere un oggetto di collisione PRINCIPALE che funziona quasi esclusivamente con il movimento del personaggio.
In particolare 2D:
dovresti comunque avere un punto principale, o solo una sorta di riferimento, per far muovere il motore che è per il movimento di un'unità. Puoi dare ad ogni unità una sottoclasse di tracciamento che ha alcune posizioni che deve percorrere, puoi specificarla nel codice di livello, (ad es. Posizione1 (x, y) posizione2 (x, y) ecc.) Il modo migliore (io don sapere a che tipo di gioco stai lavorando) probabilmente per specificare le posizioni nel livello e far sì che ogni unità le elabori nell'ordine specificato dal livello e dopo aver raggiunto ogni posizione, far sì che sostituisca la posizione desiderata con il prossimo deve arrivare.
Ci sono molti modi in cui puoi modificarlo, come avere un elenco di posizioni in primo luogo per ogni unità, poiché ciò significherebbe che non tutte le unità devono andare nelle stesse posizioni. Tuttavia, allo stesso modo, è possibile farlo anche nel codice di livello (unit1.location1 (x, y) unit1.location2 (x, y) grunt.l1 (x, y) knight.loc3 (x, y) qualunque cosa)
Solo alcune idee! Ti suggerisco di leggere la versione 3D anche se è molto meno rilevante.
EDIT: Ho deciso di fornire entrambi per chiunque potesse leggere questo (Sì, è vero) .... (Inizialmente ho solo scremato la tua domanda e non mi sono reso conto che era piuttosto specifico per il 2D fino a quando non l'ho riletto>.>)