Estou trabalhando em um jogo para celular Unity, muito parecido com uma versão multiplayer de Temple Run . Estou vendo uma latência de rede flutuante (geralmente de 200 a 500 ms) por causa da plataforma móvel.
Os personagens dos dois jogadores são mostrados como correndo pelo mesmo caminho e devem executar ações simples (pular, deslizar, ligar, etc.) para ultrapassar obstáculos.
Quando uma mensagem chega atrasada, o jogo assume que o jogador remoto passou por um obstáculo. Isso geralmente funciona bem, mas no caso de um jogador ser morto por um obstáculo, quero que o jogador remoto pareça morrer no mesmo obstáculo / posição que o jogador local. Devido à latência, o jogador remoto parece ter cruzado o obstáculo antes mesmo da mensagem anunciando sua morte.
Como posso manter os players sincronizados?
Tentei mover o player remoto de volta para a posição de morte dos jogadores locais imediatamente quando a mensagem de morte chega, parece estranha visualmente e pode causar outros problemas de sincronização.
fonte
Para complementar a resposta de Anko, você pode mudar um pouco o design do jogo, adicionando a conseqüência do obstáculo que falhou após a falha, por exemplo, um salto falhado resulta em aterrissar em uma poça de lama que desqualifica o jogador. Dessa forma, o outro jogador percebe a falha vendo o outro cair na lama, enquanto o jogador que falha a vê imediatamente.
Aqui está um bom post sobre esse problema (não é tão recente, mas é bastante interessante): Gerenciamento de tempo e sincronização de Darrin West .
fonte
É importante que o jogador local saiba a posição exata da morte do jogador remoto? Digamos que o jogador remoto não possa pular um dos seus obstáculos e, portanto, morreu.
O jogador morto veria sua morte imediatamente e continuaria a partir do local do acidente. Nada de mágico aqui.
O jogador local (o que ainda está vivo e chutando) veria o jogador remoto passar pelo obstáculo com sucesso. Uma notificação de morte chegaria. O jogador remoto tropeçava, caía e desaparecia lentamente. Na próxima vez que você souber a posição do jogador remoto, ele desaparecerá nessa posição exata, funcionando normalmente novamente. Em tal configuração, os jogadores estariam cientes da latência, mas a latência seria representada como um elemento do jogo (tropeçando para baixo), em vez de jogadores aparecerem e desaparecerem.
Se a velocidade dos dois jogadores for constante, a trajetória de corrida for predefinida e o tempo necessário para se recuperar de uma queda for conhecido, você poderá eliminar completamente a parte que está desaparecendo / desaparecendo. Imagine um jogador remoto morrendo em um dos obstáculos. Sua representação local ainda está em execução quando uma notificação é recebida. O player é exibido tropeçando imediatamente. Leva tempo para eles se levantarem e começarem a correr novamente. Na verdade, leva tanto tempo quanto se eles fossem mostrados morrendo no obstáculo. Assim, quando eles estão novamente em funcionamento, as posições local e remota são sincronizadas.
fonte