UDP vs TCP
UDP è leggero, senza stato e con perdite.
TCP è pesante, ricco di stati e robusto.
UDP è il migliore quando gli errori di trasmissione possono essere ignorati. Il TCP è il migliore quando gli errori di trasmissione devono essere corretti. Voice over IP utilizza UDP a causa delle conversazioni vocali sensibili al tempo. È meglio ascoltare un singhiozzo e tornare in sincronia per chiedere un'altra copia di un pacchetto perso e finire in ritardo.
Nel tuo caso d'uso odio trovarmi accoltellato al telefono cercando di farlo muovere solo per vederlo sporadicamente mostrare i miei movimenti più tardi in uno scoppio. Stai al passo con me.
Frequenza
Ogni 0,5 ms (una variabile di sintonizzazione) è 2000Hz e francamente più veloce della maggior parte dei monitor frequenza di aggiornamento 60Hz-120Hz. La regolazione di questo potrebbe risolvere alcuni dei tuoi problemi. Dovrebbe permetterti di avere circa 20 volte le persone connesse prima che si manifesti lo stesso problema. Scrivi il tuo software in modo che questo numero sia deciso in un'unica posizione in modo da poterlo regolare facilmente per sperimentare le tue reali esigenze.
Se vuoi avere un impatto maggiore di solo 20 volte più grande, pensa di ridurre il sovraccarico. Invece di trasmettere continuamente un pacchetto xey, prova a trasmettere alcuni di essi in un burst. La durata della raffica si aggiungerà al tuo ritardo ma sarà coerente. Abbastanza piccolo e sarà appena percettibile.
Questa idea funzionerebbe bene con il buffering del frame. Piuttosto, basta avere un fotogramma in fase di rendering in un momento in cui i videogiochi lavorano sul rendering di più di essi alla volta e li fanno consumare in ordine. Se hai 10 fotogrammi in memoria e un pacchetto arriva con 10 posizioni campionati, li rendi ciascuno nei loro frame bufferizzati.
Fare tutto questo porta la tua velocità .5ms a 0.1 secondi e significa che il tuo pubblico può essere 200 volte più grande. Questo potrebbe non essere il ritardo accettabile per alcuni videogiochi, ma dovrebbe funzionare bene per lucciole.
Alcune persone potrebbero essere connesse, ma in realtà non stanno spostando la loro lucciola al momento. Alcuni risparmi inaffidabili possono essere ottenuti mantenendo i loro smartphone in silenzio fino a quando non hanno qualcosa di utile da dire.
UI
Il tuo gioco di lucciole mi ricorda di un mago che rompe i baffi dove hanno cercato di bruciare una nave avendo una folla in attesa di specchi al sole. Il problema più grosso che avevano era nessuno poteva dire di chi fosse il riflesso. Ciò significava che non potevano concentrarsi perché non potevano sapere se avevano bisogno di spostarsi su, giù, a sinistra o a destra per essere sul bersaglio.
Considera la possibilità di distribuire gruppi di colori. Se sono un punto verde tra centinaia non ho alcuna speranza di seguire il mio punto. Se sono uno dei dieci punti rossi, ho una possibilità anche se ci sono altri 90 colori che rimbalzano. Supponendo che non sono daltonico (rosso / verde è il più comune). Buone scelte di colore dovrebbero essere in grado di minimizzare questo impatto.
Direttamente all'app Unity
In pratica stai facendo un server quando lo fai. Avrai bisogno di ascoltare su una porta per consentire agli utenti di connettersi.
Ricordati di pulire la vecchia posizione prima di spostarli in una nuova posizione se li tieni sullo schermo anche dopo che hanno interrotto la trasmissione per il momento. Se fai di nuovo il tuo stato e devi ricordarti di continuare a disegnarli sul posto fino al loro timeout. Un modo per gestirli è far sì che mantengano il loro stato e trasmettano dove erano prima, quindi puoi utilizzarlo per ripulire la vecchia posizione.
Oppure puoi pescare solo quando ti viene detto di disegnare. Questo è più semplice, ma ora la perdita di pacchetti si trasforma in sfarfallio della lucciola.