Time.deltaTime é um comando que aparece constantemente em nossos códigos na Unity.
Porém, muitos iniciantes não entendem de fato qual a função que esse comando tem.
E principalmente muitos não entendem toda a sua importância para a performance do seu jogo.
O Problema dos FPS

Ao criar um jogo na Unity, toda a aplicação de força feita em personagens, bullets, objetos, são atualizadas e calculadas em Updates.
E essas funções Updates, como o Update e o FixedUpdate, por exemplo, são lidas em taxas de FPS.
Por exemplo, se o seu jogo roda a 70 Fps, a função Updade é lida 70 vezes em um segundo.
E todo o cálculo de forças do jogo serão realizados com base nesses fps, aplicando 70 vezes por segundo a força no objeto.
Mas isso traz um problema gigantesco, pois, se um outro dispositivo rodar a 35 fps, a força seria aplicada pela metade basicamente.
Ou seja, na prática, o pulo do personagem teria diferentes alturas em diferentes dispositivos a depender dos fps da maquina.
E esse é o problema dos FPS que se arrastam para todos os cálculos de força e movimentação do seu jogo.
Update vs FixedUpdate

Na Unity, a lógica de atualização do jogo pode ser implementada em duas funções principais: Update e FixedUpdate.
E o Update é chamada uma vez por frame e Isso significa que sua frequência de execução depende diretamente da taxa de FPS.
Mas, o FixedUpdate diferente do Update, é chamada em intervalos fixos de tempo, independentemente da taxa de FPS.
Por padrão, a Unity configura a FixedUpdate para rodar a cada 0,02 segundos (ou seja, 50 vezes por segundo).
E Isso faz com que essa função seja ideal para a física do jogo, como a aplicação de forças e manipulações de Rigidbody.
E usar mal essas funções possam afetar negativamente a performance do jogo.
Por exemplo, se você implementar a movimentação baseada em física no Update, a física do seu jogo ficará horrível.
E o mesmo vale se tentarmos detectar os inputs, no fixedUpdate, causando uma imprecisão gigantesca.
Porém, como lidar com o problema dos fps na aplicação de força, e com as diferenças dessas funções ao mesmo tempo?
Time.deltaTime e Time.fixedDeltaTime

O ‘Time.deltaTime é a solução ideal para resolver a inconsistência causada pela variação dos FPS nas movimentações.
Pois, ele representa o tempo, em segundos, que levou para o último frame ser processado.
E ao multiplicar qualquer cálculo de movimento ou aplicação de força por Time.deltaTime, você está normalizando esses cálculos.
E fazendo com que o cálculo de força seja independente da taxa de FPS, e se padronizando em diferentes FPS.
Porém, com relação ao uso correto das funções, deixe o FixedUpdate para cálculos de física, do seu jogo.
E no Update, use para mecânicas que precisam ser mais precisas como captura de inputs, ou até movimentações via transform.

Mas, o detalhe é que na função FixedUpdate não precisamos adicionar Time.deltaTime no cálculo.
Pois, essa função já é lida em um período fixo de tempo, apenas se for algo muito específico e que exija muita precisão.
Ai sim utilize o Time.fixedDeltaTime na Função FixedUpdate, mas são raros os casos de necessidade.
Já no Update sim, utilize sempre que possível, o Time.deltaTime na fórmula de multiplicação do seu comando.

Em resumo:
Update: Multiplique por Time.deltaTime para garantir que a lógica seja baseada no tempo real, compensando variações na taxa de FPS.
FixedUpdate: não é necessário multiplicar por Time.deltaTime porque a função já é chamada em intervalos de tempo fixos.
Apenas se necessário, use Time.fixedDeltaTime.
Você pode aprender a criar seu jogo utilizando as melhores práticas hoje mesmo, por um preço extremamente baixo.
E mesmo que nunca tenha tido contato ou experiência coma a criação de jogos antes.
Com o curso StartGamedev você sai do zero e aprende a criar o seu primeiro jogo, na prática, passo a passo.
Seja o primeiro a comentar.