Eu sei algumas diferenças entre Update() e FixedUpdate() e recentemente usei ambas as funções em um script. O código está funcionando, mas eu tenho uma pergunta:

O uso de ambas as funções causa problemas? É seguro usar os dois?

Resposta

Atualizar pedido

Quando você acompanha a lógica e as interações do jogo, animações, posições da câmera, etc., existem alguns eventos diferentes que você pode usar. O padrão comum é realizar a maioria das tarefas dentro da função Atualizar, mas também existem outras funções que você pode usar.

FixedUpdate:

FixedUpdate é frequentemente chamado com mais frequência do que Atualizar.

Pode ser chamado várias vezes por quadro se a taxa de quadros for baixa e pode não ser chamado entre os quadros se a taxa de quadros for alta. Todos os cálculos e atualizações de física ocorrem imediatamente após FixedUpdate. Ao aplicar cálculos de movimento dentro de FixedUpdate, você não precisa multiplicar seus valores por Time.deltaTime.

FixedUpdate é chamado em um cronômetro confiável, independente do taxa de quadros

.

Atualização:

A atualização é chamada uma vez por quadro. É a principal função de burro de carga para atualizações de frame.

LateUpdate:

LateUpdate é chamado uma vez por quadro após o término da atualização.

Todos os cálculos executados em Atualizar serão concluídos quando LateUpdate começar. Um uso comum para LateUpdate seria uma câmera de terceira pessoa a seguir. Se você fizer seu personagem se mover e girar dentro do Update, você pode realizar todos os movimentos da câmera e cálculos de rotação no LateUpdate. Isso garantirá que o personagem se moveu completamente antes que a câmera rastreie sua posição.

É seguro usar a atualização fixa, a atualização e a atualização tardia simultaneamente.

 using UnityEngine; using System.Collections; public class CheckFunctionExecutionOrder : MonoBehaviour { void FixedUpdate () { Debug.Log("FixedUpdate time :" + Time.deltaTime); } void Update () { Debug.Log("Update time :" + Time.deltaTime); } void LateUpdate() { Debug.Log("late Update time :" + Time.deltaTime); } } 

Comentários

  • Resposta excelente! Pode valer a pena incluir que você pode criar uma co-rotina que aguarda FixedUpdate antes de executar; iniciar esta corrotina a partir de um método de início efetivley dá a você um LateFixedUpdate (que, embora não seja tão útil, tem seus usos).
  • Multiplicar por Time.deltaTime ainda é uma boa ideia em FixedUpdate. Ele permite que você expresse coisas como velocidades em " unidades por segundo " em vez de " unidades por tick " e se você alterar o seu intervalo de tempo fixo, você ' não terá que voltar e reajustar todos os seus parâmetros para obter o mesmas velocidades. A vantagem de FixedUpdate é que Time.deltaTime sempre retorna o fixedDeltaTime estável quando acessado de FixedUpdate, em vez de obter um resultado variável a cada quadro com base na taxa de quadros e escala de tempo, como acontece em Atualizar.

Resposta

Na verdade, eles estão todos executando ao mesmo tempo, seus scripts apenas fazem coisas nessas funções. Atualização é chamada uma vez por quadro e FixedUpdate é chamado uma vez a cada “atualização física” (que é uma vez a cada período fixo de tempo que você pode ajustar).

Também há LateUpdate , se você quiser que certas funções sejam executadas depois a função Atualizar desse quadro de referência. Para obter uma lista completa de mensagens, consulte a referência do MonoBehaviour .

Aqui está um link para Tutorial do Unity que cobre isso .

Comentários

  • A atualização de física é controlável? Quer dizer, se eu definir Fixed TimeStep para algum valor, a atualização fixa será executada após esse tempo? e a física do jogo também funcionará depois desse período de tempo?
  • @MuhammadFaizanKhan Deve ser assim que funciona. Eu ' não tenho certeza sobre a versão atual do Unity, no entanto, era como estava quando escrevi a resposta. Basicamente, a atualização é atualizada a cada quadro e a física tem sua própria taxa de quadros e função de atualização separada da outra função de atualização.

Resposta

É seguro usar Update (), FixedUpdate () e LateUpdate () em um único script. Pelo menos eu tenho e nunca tive problemas.Eu geralmente usarei Update () para meus loops principais, FixedUpdate () para coisas como física e LateUpdate () para loops que desejo executar depois de todo o resto.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *