Ilustração conceitual do Time.deltaTime equalizando diferentes taxas de quadros (FPS) na Unity.

Time.deltaTime: Por que seu jogo roda diferente em cada PC?

O Segredo da Velocidade Constante: Entendendo o Time.deltaTime

Você programou seu personagem para andar 0.1 metros a cada frame no Update().

void Update() {
    transform.Translate(0.1f, 0, 0); // Move 0.1 no eixo X
}

Parece inofensivo, certo? Errado.

O Update() roda uma vez por quadro (frame).

  • No seu PC Gamer (100 FPS): O código roda 100 vezes por segundo. O personagem anda 100 * 0.1 = 10 metros em um segundo.
  • No PC do seu amigo (30 FPS): O código roda 30 vezes por segundo. O personagem anda 30 * 0.1 = 3 metros em um segundo.

Percebeu o desastre? Quem tem PC melhor joga mais rápido. Isso quebra completamente o jogo.

Você precisa que o movimento seja baseado em TEMPO, não em QUADROS. Você quer “metros por segundo”, e não “metros por frame”.

1. O Salvador: Time.deltaTime

O Time.deltaTime é uma variável que a Unity te dá de graça. Ela contém o tempo (em segundos) que passou desde o último frame até agora.

  • Se o jogo está rápido (muitos frames), o tempo entre eles é minúsculo (ex: 0.01s).
  • Se o jogo está lento (poucos frames), o tempo entre eles é maior (ex: 0.1s).

Ele é o equalizador. Ele “sente” a velocidade do computador e ajusta o número para compensar.

2. A Fórmula Mágica

Para corrigir seu movimento, você só precisa fazer uma multiplicação simples:

Errado (Depende de Frame):

transform.Translate(Vector3.forward * velocidade);

Certo (Depende do Tempo):

transform.Translate(Vector3.forward * velocidade * Time.deltaTime);

Quando você multiplica por Time.deltaTime, você está dizendo pra Unity: “Não importa se esse PC roda a 10 ou 1000 FPS, eu quero mover X metros A CADA SEGUNDO.

3. E se eu não usar?

Se você não usar, seu jogo será injogável em qualquer máquina diferente da sua.

  • Física (Rigidbody) a Unity já resolve sozinha.
  • Mas TUDO que você move por código dentro do Update (personagens, cronômetros, rotações, cooldowns) precisa ser multiplicado pelo Time.deltaTime.

Resumo da Ópera

Faça disso um reflexo muscular. Escreveu uma linha de movimento no Update? Multiplica por Time.deltaTime.

É a diferença entre um protótipo amador e um software profissional que roda liso no PC da Xuxa e no PC da NASA.

Conclusão da Série

Parabéns, Dev! Você passou pelos 5 portões do inferno dos iniciantes:

  1. Física (Colliders)
  2. Ciclo de Vida (Start/Update)
  3. Organização (Prefabs)
  4. Produtividade (SerializeField)
  5. Consistência (Time.deltaTime)

Se você dominar esses 5 conceitos, você já sabe mais que 80% da galera que só copia tutorial sem entender.

Agora é com você. Abra a Unity, pegue aquele projeto empoeirado e aplique essas correções. O melhor jogo é o jogo terminado.

Mãos à obra e até a próxima!

Compartilhe !