Eu ia escrever isso como um comentário, mas acabou sendo bastante longo, então eu o transformei em uma resposta.
As respostas atuais são na maioria corretas, mas algumas coisas mencionadas são enganosas / erradas.
Em geral, a maioria das tarefas relacionadas ao jogo é executada Update.
Por exemplo, você não deseja pesquisar informações FixedUpdate(não por causa do desempenho, mas porque as chamadas simplesmente não funcionam corretamente). AI cai no mesmo barco.
Física atualizada continuamente é a única tarefa relacionada à jogabilidade que FixedUpdatedeve ser usada. Chamadas não contínuas / de vez em quando para coisas como Physics.Raycast, ou mesmo Rigidbody.AddForcepertencem Update. Minha menção Rigidbody.AddForceé aparentemente contrária ao que pode estar implícito na documentação, mas a chave é Contínua vs Não Contínua.
Uma enorme razão pela qual apenas a física contínua pertence FixedUpdateé a natureza real de FixedUpdate. Outras respostas mencionaram como FixedUpdate é chamado em um interval, but that's slightly misleading. In reality, a script is passed a time in Time.deltaTime/ fixo Time.fixedDeltaTimeque não corresponde diretamente ao tempo real entre as chamadas, mas ao tempo simulado entre as chamadas.
(* Time.deltaTimee Time.fixedDeltaTimetem o mesmo valor quando chamado em FixedUpdate[Unity é capaz de saber se a chamada atual se Time.deltaTimeoriginou durante FixedUpdatee retorna Time.fixedDeltaTime])
Naturalmente, o mesmo caminho Updatenão pode ser chamado de maneira constante por causa de desempenho variável, nem pode FixedUpdate. A principal diferença é que, cada quadro, se FixedUpdatenão tiver sido chamado com frequência suficiente para atingir o intervalo correto entre as chamadas, ele será chamado várias vezes (ou não será chamado a média é muito alta). É a isso que os documentos da Ordem de Execução se referem ao dizer que FixedUpdate pode ser chamado várias vezes por quadro:
... FixedUpdate: FixedUpdate é chamado frequentemente com mais freqüência que Update. Pode ser chamado várias vezes por quadro, se a taxa de quadros for baixa e não puder ser chamado entre quadros, se a taxa de quadros for alta ...
Isso não afeta a Física devido à natureza do restante da ordem de execução e do mecanismo, mas praticamente qualquer outra coisa que você colocar FixedUpdateserá afetada e causará problemas.
Por exemplo, se você colocar o processamento de AI dentro, FixedUpdatenão há razão para supor que o AI não pulará atualizações para vários quadros seguidos. Além disso, cada vez que o FixedUpdate fica para trás, sua IA é atualizada várias vezes em um único quadro antes que coisas como física e entrada / movimento do jogador sejam processadas, o que é, no mínimo, um desperdício de processamento, mas também é extremamente provável que cause para rastrear bugs e comportamento irregular.
Se você precisar fazer algo em um intervalo fixo, use outros métodos fornecidos pelo Unity, como Coroutinese InvokeRepeating.
E uma pequena nota sobre Time.deltaTimee quando usá-lo:
A maneira mais fácil de descrever o efeito de Time.deltaTime é alterar um número de unidade por quadro para unidade por segundo . Por exemplo, se você tiver um script com algo parecido transform.Translate(Vector3.up * 5)com o Update, estará movendo a transformação essencialmente a uma taxa de 5 metros por quadro . Isso significa que, se a taxa de quadros for baixa, o movimento será mais lento e se a taxa de quadros for alta, o movimento será mais rápido.
Se você pegar o mesmo código e alterá-lo para transform.Translate(Vector3.up * 5 * Time.deltaTime), o objeto está sendo movido a uma taxa de 5 metros por segundo . Isso significa que, independentemente da taxa de quadros, o objeto se moverá 5 metros a cada segundo (mas quanto mais lenta a taxa de quadros, mais saltado o movimento do objeto aparecerá, pois ele ainda move a mesma quantidade a cada X segundos)
Em geral, você deseja que seu movimento seja por segundo. Dessa maneira, independentemente da velocidade do computador, sua física / movimento se comportará da mesma maneira e você não terá bugs estranhos aparecendo em dispositivos mais lentos.
E não faz sentido usá-lo FixedUpdate. Por causa do que mencionei acima, você obterá o mesmo valor a cada chamada (o valor Timestep de atualização fixa) e isso não fará nada com seus valores. O movimento / física definido em FixedUpdatejá estará em unidades por segundo, para que você não precise dele.