Neste tutorial, vamos ver o que é o Time.deltaTime no Unity e como utilizá-lo.
A versão em vídeo deste tutorial não está disponível atualmente neste idioma.
Transcrição do vídeo
Olá a todos! Neste tutorial, vamos ver o que é o Time.deltaTime no Unity e como utilizá-lo.
Este tutorial voltado para iniciantes é perfeito para quem está começando a programar em C# dentro do Unity, pois o tema é fundamental e merece ser bem compreendido, já que você irá encontrá-lo em muitos scripts e tutoriais.
O tutorial foi criado usando Unity 2022, mas o Time.deltaTime já está presente há várias versões do software e provavelmente continuará existindo no futuro.
Time.deltaTime é uma variável que representa o tempo decorrido, em segundos, entre o último frame e o frame atual, ou, se preferir, o tempo necessário para concluir o frame anterior.

Ele é utilizado para tornar movimentos e animações independentes da taxa de quadros, geralmente multiplicando a velocidade de um objeto em unidades por segundo por Time.deltaTime a cada frame.
Dessa forma, a velocidade por frame irá variar de acordo com a taxa de quadros, garantindo a mesma velocidade em dispositivos com diferentes níveis de desempenho.
Vamos ver um exemplo prático do que acabamos de descrever, com um caso muito simples: o movimento de um objeto ao longo de um eixo com velocidade constante. Insira um objeto na cena, enquadrando a cena de cima com uma visualização Isometric.

Atribua ao objeto um script C#, chamando-o, por exemplo, de movement, depois crie um Vector3 para indicar um deslocamento de uma unidade, que queremos percorrer em um segundo:
private Vector3 obVelocity = new Vector3(0.0f, 0.0f, 1.0f);
Sabemos que Update é chamado a cada frame; no entanto, não sabemos quantos frames por segundo o jogo irá executar, pois isso varia com base em vários parâmetros.
Se a nossa taxa de quadros fosse constantemente 50 frames por segundo, poderíamos modificar obVelocity para (0.0f, 0.0f, 0.02f), movendo 0.02 unidades a cada chamada de Update, e portanto a cada frame, resultando em um deslocamento de uma unidade por segundo.
Como não temos essa possibilidade, em Update escreveremos:
transform.position += (obVelocity * Time.deltaTime);

Salve o script e volte ao editor do Unity para observar o resultado: o objeto se move de forma linear, mantendo uma velocidade de uma unidade da cena por segundo.
Em conclusão, para mover um objeto a uma determinada velocidade, expressa em unidades da cena por segundo, defina essa velocidade em uma variável e, dentro da função Update, multiplique-a por Time.deltaTime, como mostrei anteriormente.
Agora vamos ver outro exemplo.
Na cena que estou utilizando agora, a Main Camera recebeu um script de movimento que detecta o pressionamento das teclas de seta, usando Input.GetAxis para Horizontal e Vertical.
Os valores de Horizontal e Vertical variam de -1 a 1 em ambos os casos, então, se eu multiplicasse diretamente esses valores por Time.deltaTime na função Update do script, obteria um deslocamento de uma unidade na cena por segundo, mas essa solução não permite ajustar a velocidade.
Para resolver esse problema, a maneira mais simples é definir uma variável private com o modificador Serialized, que pode ser visualizada e alterada no Inspector ao testar o jogo no Editor.
No exemplo que estou mostrando no vídeo, essa variável se chama speed e inicialmente tem o valor 12.

Na função Update, o movimento é gerenciado por meio de controller.Move, porque o personagem está associado a um componente Character Controller que é movimentado usando a função Move.
A função é chamada com um parâmetro bastante longo, dividido em duas partes.
Na primeira parte, o deslocamento ao longo dos eixos X e Z é calculado com base na entrada do usuário, armazenada na variável move, que é um Vector3.
Na segunda parte, é calculada a força da gravidade quando um salto é realizado.

Time.deltaTime é utilizado tanto no cálculo do movimento ao longo dos eixos quanto no movimento vertical devido à gravidade, mas vamos ignorar a segunda parte, que exigiria uma discussão mais longa, e focar na primeira.
O vetor de movimento move é multiplicado por Time.deltaTime, como vimos com o cubo no primeiro exemplo, mas também é multiplicado pela variável float speed.
Em seguida, passo para o editor do Unity e inicio o jogo para mostrar como é possível alterar a velocidade de movimento do personagem modificando, em tempo real, o valor do parâmetro Speed na aba do script.
Dessa forma, é possível calibrar a velocidade para o início do jogo.
Como essa velocidade é multiplicada por Time.deltaTime, sabemos que ela será a mesma em diferentes dispositivos, independentemente da taxa de quadros de execução.
Como speed é uma variável no código, também será possível modificá-la durante o jogo, com base em determinados eventos.
Por exemplo, o jogador pode beber uma poção que permita mover-se com o dobro da velocidade ou, ao contrário, avançar mais lentamente do que o normal.
O ponto principal é que essa velocidade será consistente em diferentes dispositivos, pois é independente da taxa de quadros, graças ao Time.deltaTime.
Em conclusão, neste vídeo vimos dois exemplos simples de uso do Time.deltaTime.
Em breve, publicarei um vídeo sobre rotações usando Slerp, no qual Time.deltaTime será utilizado para obter rotações em velocidade constante, independentemente da taxa de quadros.
Isso é tudo para este tutorial! Até breve!