Feedback só depois da resposta do servidor (requisição-resposta) Request-response (no client-side feedback)
ID da causa sy-request-response · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
Ao apertar o botão, não há animação nem som até a resposta do servidor chegar. O ping vira o tempo de resposta.
Por quê Skills, movimento e coleta de itens só são reproduzidos depois da confirmação do servidor → Efeito Desde o momento em que você aperta, nada acontece durante o tempo de ida e volta + a espera do tick → Na tela Com ping de 150 ms, todas as ações ficam 0,2 s mais lentas
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Cliente: começar animações, sons e efeitos assim que o jogador aperta (feedback no cliente), mostrar só os resultados (dano, recompensas) depois da confirmação do servidor, aplicar movimento e ataque básico na hora com predição e, ao receber uma correção de posição do servidor, reaplicar a partir dela os inputs ainda não confirmados. Servidor: calcular o movimento a partir dos inputs recebidos e enviar correção só quando a diferença para a posição prevista pelo cliente passar do limite.
Números de referência
Tempo de resposta ≈ ping + metade do intervalo entre ticks + um frame. Com 20 ticks e ping de 150 ms, cerca de 190 ms.
No gráfico
Sempre alto desde o início · Tempo do input até o início da animação, RTT (ping)
Onde olhar
Registrar no log do cliente, em build de desenvolvimento, o horário do botão, do início da primeira animação ou som e da chegada da resposta do servidor, lado a lado com o RTT do jogo. Medir variando o ping com a emulação de rede da engine (Unreal NetEmulation.PktLag) ou com tc netem do Linux no servidor de testes
Confirma se
A animação sempre começa no mesmo instante em que a resposta do servidor chega, e o tempo do input até a animação é RTT + espera do tick, crescendo exatamente na medida do atraso inserido
Descarta se
A animação começa assim que o jogador aperta e só o resultado, como os números de dano, atrasa: design correto. Atraso maior que o intervalo entre ticks mesmo com ping baixo: aponta para espera dupla de tick ou problema de frame no cliente
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
Para jogos que não precisam de resposta rápida, como os de turno, de cartas e idle, este modelo é o mais simples e seguro. O problema aparece quando um jogo com controle em tempo real usa esse modelo até para movimento e ataque básico.
Using Gameplay Abilities in Unreal EngineEpic Games Local Predicted executa assim que o jogador aperta e o servidor dá a decisão final; Server Initiated não tem predição, e quem usa vê o atraso
Using Network Emulation in Unreal EngineEpic Games Testa com latência mínima e máxima e taxa de perda de pacotes configuradas no servidor e no cliente; no console, a configuração usa comandos como NetEmulation.PktLag
tc-netem(8) — Linux manual pageiproute2 Ferramenta de teste que insere atraso e jitter (delay TIME JITTER) e perda (loss random PERCENT) nos pacotes de saída para imitar uma rede real