Quanto è difficile costruire un gioco multiplayer performante in tempo reale su dispositivi mobili in questo momento?
Sono abbastanza sicuro che Android e iOS permettono di usare UDP in una forma o nell'altra. Sarebbe piuttosto strano se non implementassero un protocollo standard di base come quello.
Guarda UDP invece di TCP/Websockets. Mentre sia TCP che Websockets sono estremamente utili, nessuno dei due è una buona scelta per il multiplayer. TCP tenterà di reinviare i dati se i dati vengono persi, il che può essere molto dannoso per la comunicazione in tempo reale. WebSockets si siede sopra il TCP, quindi non risolve il problema. In uno scenario in tempo reale è meglio progettare intorno ai pacchetti che possono essere persi invece di cercare di reinviare le informazioni.
La mia domanda è: come state facendo la vostra comunicazione? In ogni caso, indipendentemente dal fatto che siate cablati o che usiate una rete mobile, è meglio ridurre la quantità di dati che state inviando. C'è molto materiale su come raggiungere questo obiettivo, ma ecco alcune nozioni di base
- Non inviare dati di posizione a meno che non sia necessario per cose come le correzioni
- Se hai bisogno di inviare dati di posizione ad un ritmo costante, cerca lo smoothing per ridurre la frequenza di invio dei dati di posizione.
- Hai davvero bisogno di essere preciso? Se un server decide chi vince, essere estremamente precisi potrebbe non essere assolutamente necessario. È possibile approssimare alcune cose, riducendo la quantità di dati da trasferire.
- Inviare azioni. Quindi se salto, dovrei dire all'altra macchina che ho saltato. Se le cose sono impostate bene, l'effetto dovrebbe essere identico
- Stai ospitando un gioco su un server, o uno dei client agisce come un server? Forse vale la pena cercare di usare uno dei client come server (ospitato su uno dei dispositivi) se il numero di giocatori è molto piccolo.
- Le connessioni fanno schifo sul cellulare perché sono in movimento e i segnali delle torri non sono affidabili. È imprevedibile e la latenza può salire alle stelle. Si può limitare la connessione ad essere solo su wifi? Non è perfetto, ma migliora la stabilità generale.
- Come ho detto prima, hai davvero bisogno di essere preciso?
Come hai detto, hai un corridore senza fine. A meno che non stiate facendo uno sparatutto multiplayer, non è davvero necessario essere precisi. In realtà, i giochi online sono un'illusione di gioco fluido. Non c'è bisogno di precisione assoluta finché l'utente interpreta un'esperienza di gioco fluida. Le cose non vengono decise sulla macchina locale di solito, ma piuttosto dall'host del gioco in ogni caso.
Nello scenario perfetto, abbiamo una latenza assolutamente minima e nessuna perdita di pacchetti. Ma quando non è così, cosa facciamo? Bariamo. È incredibile quanta interpolazione e predizione avvenga dietro le quinte perché le cose appaiano lisce. È un caos totale sul server quando ogni giocatore ha una diversa latenza, perdita di pacchetti, cali di connessione, ecc.
In altre parole, non abbiate paura di ingannare il giocatore facendogli credere che le cose stiano andando lisce finché le regole del gioco sono ancora seguite. Se il giocatore è 5 fuori sulla x dalla sua posizione reale (sul mio schermo), forse non è troppo male. Forse essere indietro di 100ms non è troppo male. Siete voi a decidere se queste discrepanze sono accettabili finché le cose hanno ancora un senso, le cose sono giuste e il gioco fa ancora sembrare che sia giocato in tempo reale.
Articoli simili
- Come costruire un gioco mobile multiplayer in tempo reale
- Quanto costerà costruire un server di video streaming per video live HD su dispositivi mobili per un milione di utenti con opzioni di espansione?
- Qual è il server XMPP più performante?
- Qual è il processore più performante, MediaTek Dimensity 1000 o Huawei Kirin 990?