Attualmente, sto simulando le forze di impatto fisico per evitare le unità locali, ma questo metodo a volte spinge le unità fuori formazione e ha effetti molto indesiderati quando le unità si raggruppano.
Per i giochi RTS come Starcraft 2, come viene fatto l'elusione locale? La fisica è simulata o un controllore onniciente decide dove dovrebbe essere tutto? So che questa domanda potrebbe essere un po 'ampia, quindi chiedo specificamente come ottenere i comportamenti di evitamento locali di Starcraft 2; anche se tutto ciò che funziona sarà molto apprezzato.
Non sto cercando alcun codice, ma solo risorse utili o spiegazioni su come Starcraft 2 (o giochi simili) gestisce l'evitamento locale.
Attualmente, ho implementato il rilevamento delle collisioni (con il vettore di penetrazione), le forze di collisione e il movimento per velocità. Ogni unità viene controllata contro un'altra per una collisione: se si scontrano, gli oggetti vengono immediatamente sfalsati dal vettore di penetrazione, quindi viene applicata la forza di collisione. Quindi un altro loop sposta gli oggetti in base alle loro velocità e applica la resistenza alle velocità. L'offset mitiga il problema delle forze di collisione eccessive applicate alle unità raggruppate, ma le unità a volte continuano a sparare.
La soluzione che sto cercando deve soddisfare i seguenti requisiti (come in Starcraft 2):
- Gli oggetti non devono sovrapporsi; o almeno le sovrapposizioni devono essere eventualmente risolte.
- Gli oggetti non si allontanano più del necessario, quindi 2 unità possono stare in piedi e muoversi l'una accanto all'altra in una formazione.
- Non dovrebbero esserci comportamenti strani quando gli oggetti si aggregano verso la stessa destinazione.
- Può supportare unità di diverse dimensioni e persino diverse forme convesse.
Ciò a cui ho pensato finora è invece di rilevare le collisioni, rilevare le collisioni future in modo che la sovrapposizione non avvenga mai. Quindi applica il vincolo, assicurandoti che le velocità delle 2 unità non si sovrappongano. Sto ancora armeggiando con l'algoritmo per limitare i movimenti oltre la sovrapposizione.