Se a hora do jogo fica guardada em um formato decimal de baixa precisão (float), quanto mais tempo o jogo fica aberto, pior fica a resolução temporal (a menor diferença de tempo que dá para distinguir), e movimentos e efeitos começam a tremer.
Por quê O tempo desde que o jogo foi aberto é acumulado em float ou passado assim mesmo para os shaders → Efeito Quanto mais tempo o jogo fica aberto, maior fica a menor diferença que o float consegue representar → Na tela Só no cliente aberto há dias, personagens, animações e efeitos com movimento tremem; reiniciando, tudo volta ao normal
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Guardar o tempo decorrido em double (64 bits) ou em inteiro, fazer o tempo passado aos shaders voltar a zero periodicamente, fazer testes automatizados de longa duração, de vários dias.
Números de referência
Um float de 32 bits tem pouco mais de 7 dígitos significativos; com o jogo aberto há um dia (cerca de 86.400 s), a resolução temporal fica em torno de 8 ms, cerca de metade de um frame a 60 FPS (16,7 ms), e, em uma semana, em torno de 60 ms, mais que um frame inteiro.
No gráfico
Subida lenta · Reports de tremor, por tempo de cliente aberto
Onde olhar
Pedir, junto com cada report de tremor, há quanto tempo o cliente está aberto e comparar antes e depois de reiniciar. No desenvolvimento, testar com a hora de início do jogo ajustada para vários dias atrás
Confirma se
Treme só no cliente aberto há dias, some ao reiniciar e piora quanto mais tempo o jogo fica aberto
Descarta se
Treme logo depois de abrir: “Buffer de interpolação ausente ou curto demais” ou “Resolução do timer”
Como verificar
Verificação no ambiente do jogador
Saiba mais
Aparece principalmente em MMOs mobile em que o jogador deixa a caça automática ligada por dias sem fechar o jogo. O Time.time do Unity também é float, por isso o Unity oferece à parte o Time.timeAsDouble, em double, e recomenda usá-lo.
Fontes
Time.timeAsDoubleUnity Versão double de Time.time; com o jogo aberto por muito tempo, é mais precisa que float e, na maioria dos casos, é a recomendada