Implementazione del livellamento della rete


13

Stiamo realizzando uno sparatutto in prima persona più semplice. Il client invia la sua posizione al server a una velocità fissa (attualmente a 10Hz). Il server invia un singolo messaggio che contatta tutte le posizioni dei giocatori a tutti i giocatori alla stessa velocità (10Hz).

Come previsto, il movimento è piuttosto discontinuo poiché il gioco a 60 fps sta ricevendo aggiornamenti 10 volte al secondo. Qual è il modo migliore per attenuare questo movimento? Il modo più ovvio sarebbe interpolare tra gli ultimi due pacchetti, in modo che l'interpolazione finisca quando riceviamo un nuovo pacchetto. Ma questo aggiunge un ritardo istantaneo di 100 ms per tutti i giocatori.

L'altro modo sarebbe usare la velocità e l'accelerazione dedotte dagli ultimi pacchetti per prevedere dove si trova il giocatore prima dell'arrivo del pacchetto successivo, tuttavia se la previsione è sbagliata, il giocatore tende a saltare non appena viene ricevuto un nuovo pacchetto .

Qualcuno sa come i titoli AAA risolvono questo problema?

Risposte:


9

Fanno esattamente quello che hai appena detto: uno di questi due approcci o qualche compromesso tra di loro. (ad es. accettare un piccolo ritardo e interpolare, ove possibile, ed estrapolare quando il ping supera quel ritardo.) Invece di saltare (noto anche come "schiocco") in una posizione corretta, in genere si esegue una sorta di interpolazione tra la previsione errata e il valore corretto, livellandolo, se possibile. Gestisci anche le correzioni in passato per ridurre la quantità di correzione che devi applicare.

Questa è una domanda frequente e ci sono diversi link canonici che probabilmente troverai altrove su gamedev.stackexchange.com se cerchi, e includono:

Ciò che ogni programmatore deve sapere sulla rete di gioco (questo riassume le cose nei prossimi due collegamenti)

Rete multiplayer fonte

Architettura di rete irreale

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.