Sempre que inicializamos um jogo codificado em qualquer Game Engine, existe uma ordem pré-definida, que determinará como as coisas serão executadas
E é extremamente importante estudarmos mais afundo essa ordem, para de fato compreendermos seu funcionamento e principalmente, qual a melhor função a ser usada.
E na Unity não seria diferente, pois, nela encontramos uma ordem de execução muito bem definida, e vamos explorar mais a seguir.
Clique aqui para acessar a página oficial da documentação da Unity
Ordem de execução: Awake
Este método, é uma função usada para inicializar variáveis ou estados antes do jogo começar.
Pois, ele é chamado automaticamente quando um script é inicializado, antes de qualquer função Start, todos os Awakes são Lidos.
E é comumente usado para configurar referências entre scripts ou para definir valores padrão de variáveis.
Ordem de execução: OnEnable
Este é chamado quando um objeto é ativado ou reativado na cena do jogo.
E ele é útil para inicializar variáveis ou estados que precisam ser configurados toda vez que um objeto é ativado.
Pois, por ser chamado antes da função Start, ele pode ser usado para preparar o objeto antes de começar a execução do jogo.
Ordem de execução: Reset
O método Reset é uma função especial usada em scripts de componentes personalizados, muito utilizado para se trabalhar com inspectors.
E ele é chamado automaticamente quando um componente é adicionado a um objeto ou quando o usuário clica no botão “Reset” no Inspetor para um componente específico.
Mas, o objetivo do método Reset é redefinir as variáveis e estados do componente para seus valores padrão, sendo destinado a ser usado no ambiente do Editor para ajudar a configurar componentes de maneira rápida e fácil.
Ordem de execução: Start
É chamado uma vez no início da execução do jogo para cada objeto que contém um script com essa função.
Pois, ele é frequentemente usado para inicializar variáveis e estados do objeto antes do jogo começar.
E é importante lembrar que o Start é chamado apenas uma vez no início do jogo, então ele não é adequado para atualizar variáveis ou estados durante a execução do jogo
Ordem de execução: FixedUpdate
O método FixedUpdate é uma função usada no Unity para realizar atualizações em intervalos fixos de tempo.
Ou seja, é chamado várias vezes como um Update, mas não sofre tanto oscilação a depender dos FPS do hardware.
E isso a torna ideal para lidar com física e cálculos, como Rigidbody e Collider, que exigem maior precisão temporal.
Ordem de execução: OnStateMachineExit/Enter
OnStateMachineEnter é chamada quando a máquina de estados é ativada e entra em execução, podendo usar essa função para inicializar qualquer variável ou estado necessário.
Mas, OnStateMachineExit é chamada quando é desativada e deixa de ser executada, ocorrendo geralmente quando uma transição é feita para outro estado, sendo útil para limpar quaisquer recursos ou variáveis que não são mais necessários.
E essas funções são úteis para gerenciar a lógica de animação e comportamento dos personagens ou objetos em seu jogo.
Ordem de execução: Fire Animation Events
Os Eventos de Animação, são usados no Unity para disparar ações personalizadas durante a reprodução de uma animação.
E eles permitem que você associe um evento a um determinado frame da animação, e execute uma função específica no script, quando esse frame for atingido na reprodução da animação.
Mas, OnAnimatorMove é uma função usada para controlar o movimento de um personagem com base em suas animações.
Quando você tem uma animação que não move o personagem por si só, você pode até usar OnAnimatorMove para aplicar o movimento de acordo com a animação, podendo criar personagens com movimentos mais realistas e animações sincronizadas.
State Machine Behaviour Callbacks
São funções que você pode implementar em scripts personalizados derivados da classe StateMachineBehaviour no Unity.
E permitem que você execute ações específicas em diferentes momentos durante a execução de um estado de animação.
OnStateEnter: Chamado quando um estado é ativado, é útil para inicializar variáveis ou executar ações no início de um estado específico.
OnStateUpdate: Chamado a cada quadro enquanto o estado está ativo,sendo útil para atualizar a lógica relacionada ao estado ou verificar condições de transições.
OnStateExit: Chamado quando um estado é desativado, ocorrendo quando uma transição vai para outro estado, e útil para limpar recursos ou redefinir variáveis.
OnStateMove: Chamado a cada quadro enquanto o estado está ativo e uma transição de movimento está ocorrendo, é útil para sincronizar a posição do personagem com o movimento da animação 1.
OnStateIK: Chamado a cada quadro enquanto o estado está ativo e a animação de IK (Inverse Kinematics) está sendo resolvida.
Esses callbacks são úteis para gerenciar a lógica de animação e comportamento dos personagens ou objetos em seu jogo, e podem ser usados para criar interações mais complexas e realistas.
OnAnimatorMove
Essa função é chamada a cada frame pelo componente animator, e ajuda a manter a sincronia entre o movimento do personagem e as animações.
OnAnimatorMove é uma função usada para controlar o movimento de um personagem com base em suas animações.
Quando você tem uma animação que não move o personagem por si só, você pode até usar OnAnimatorMove para aplicar o movimento de acordo com a animação, podendo criar personagens com movimentos mais realistas e animações sincronizadas.
Ordem de execução: OnAnimatorIK
É uma função callback usada para modificar a cinemática inversa (IK, Inverse Kinematics) de um personagem controlado por um componente Animator.
E essa função é chamada a cada frame da atualização da animação, útil para configurar alvos e pesos IK, para os membros do personagem.
Mas, a função OnAnimatorIK pode ser usada para criar animações mais realistas, permitindo que os membros do personagem interajam com o ambiente de maneira natural.
Ordem de execução: OnTrigger
São usados para detectar colisões entre objetos na Unity, onde o Enter é ao entrar na colisão, Stay é durante a colisão, e Exit é quando sai da colisão, sendo marcados com 2D em projetos nessa configuração.
E eles são úteis para situações em que você deseja detectar a interação entre dois objetos, que se atravessam, ou como áreas de detecção, zonas de gatilho e sensores.
Pois, ambos os objetos envolvidos devem ter um componente Collider, e pelo menos um deles deve ter um componente Rigidbody.
Ordem de execução: OnCollision
Os eventos OnCollision são muito semelhantes aos Triggers, porém, usados para detectar colisões entre objetos que possuem colisores ativos.
E são úteis para situações em que você precisa detectar a interação entre dois objetos, como colisões físicas, interações entre o jogador e o ambiente, etc.
E aqui também temos as funções Enter, Stay, Exit, com acréscimo de 2D em projetos 2D, e respeitando também a regra de que ambos os objetos envolvidos devem ter um componente Collider, e pelo menos um deles deve ter um componente Rigidbody.
yield WaitForFixedUpdate
É usado em corrotinas que precisam executar operações que dependem da física do jogo, como movimento de objetos ou detecção de colisões.
Mas, ao usa-lo, a corrotina é pausada até a próxima atualização fixa do motor de física, garantindo que as operações sejam executadas corretamente e sincronizadas com a física do jogo.
E é importante observar que o yield WaitForFixedUpdate não é o mesmo que o yield WaitForSeconds, que pausa a corrotina por um período em segundos, independentemente da atualização do motor de física.
Ordem de execução: OnMouse
Os eventos OnMouse são usados para detectar interações do mouse com objetos na Unity, e úteis para situações em que você deseja detectar a interação do usuário com objetos específicos, como clicar em botões ou selecionar itens.
E existem cinco principais eventos OnMouse que você pode usar: OnMouseDown, OnMouseUp, OnMouseEnter, OnMouseExit, OnMouseOver, e para usar os eventos OnMouse, o objeto precisa ter um componente Collider.
OnMouseDown: quando o usuário pressiona o botão do mouse enquanto o cursor está sobre o objeto.
OnMouseUp: quando o usuário solta o botão do mouse enquanto o cursor está sobre o objeto.
OnMouseEnter: quando o cursor do mouse entra na área do objeto.
OnMouseExit: quando o cursor do mouse sai da área do objeto.
OnMouseOver: é chamado a cada frame enquanto o cursor do mouse está sobre o objeto.
Ordem de execução: Update
É chamada automaticamente a cada frame do jogo, ou seja, em 45 fps, é chamada 45 vezes em 1 segundo, 65 fps será chamada 65, e assim por diante.
E é comumente usado para: atualizar a posição, rotação ou escala de objetos, verificar entradas do usuário, como teclas pressionadas ou movimento do mouse.
E executar lógica de jogo, como contagem de pontos ou verificação de condições de vitória, controlar animações ou efeitos visuais.
Ordem de execução: yield Null
Ao usar “yield return null” em uma corrotina, a função é pausada no ponto onde o comando é chamado, e a execução é retomada no próximo frame a partir desse ponto.
E é útil para criar sequências de eventos, animações personalizadas ou processos que precisam ser distribuídos ao longo do tempo.
Mas, dividindo ações ou processos em várias partes, evitando que eles bloqueiem a atualização do jogo, e causem problemas de desempenho.
yield WaitForSeconds
É usado em corrotinas quando desejamos pausar a execução da corrotina por um período específico de tempo, em segundos.
E é muito útil quando você deseja criar atrasos ou intervalos entre ações em seu jogo.
Por exemplo, tempo de invencibilidade, atrasos para receber outros danos, temporizador, etc.
Ordem de execução: yield WWW
Era uma classe antiga no Unity para lidar com solicitações HTTP e carregar dados da web.
No entanto, a classe WWW foi descontinuada e substituída por UnityWebRequest.
Que é uma API mais moderna e eficiente para lidar com solicitações (HTTP) e comunicação de rede.
Ordem de execução: StartCoroutine
É uma função usada para iniciar corrotinas e para usar StartCoroutine, você deve criar uma função IEnumerator que contém o código da corrotina.
E, em seguida, chamar StartCoroutine passando o nome dessa função ou uma chamada de função como argumento.
Ordem de execução: LateUpdate
É uma função que também é chamada automaticamente a cada frame do jogo, assim como a função Update.
Mas, a principal diferença é que LateUpdate é chamada após todas as chamadas de Update terem sido concluídas no mesmo frame.
Pois, isso a torna útil para ações que dependem dos resultados das chamadas de Update, como, por exemplo, lidar com a atualização das câmeras do jogo.
Ordem de execução: Scene Rendering
As funções desse bloco estão relacionadas ao processo de renderização de cenas e objetos em seu jogo.
E algumas dessas funções são eventos de ciclo de vida do MonoBehaviour, que você pode usar em seus scripts para personalizar o comportamento de renderização.
OnWillRenderObject: chamada antes de um objeto ser renderizado a cada frame, podendo ser útil, por exemplo, para alterar a cor ou a textura de um objeto com base em sua distância da câmera.
OnPreCull: chamada antes do processo de seleção (culling) da câmera, útil para modificar propriedades da câmera ou do objeto, antes que o processo de seleção seja realizado.
OnBecameVisible e OnBecameInvisible: essas funções são chamadas quando um objeto com Renderer entra ou sai do campo de visão de uma câmera.
OnPreRender: chamada antes da renderização da câmera, útil para ajustar propriedades da câmera ou do objeto antes que a renderização comece.
OnRenderObject: chamada após a renderização de todos os objetos na cena, útil para desenhar elementos adicionais na tela, como linhas de depuração, formas geométricas ou efeitos visuais.
OnPostRender: chamada após a renderização da câmera, usada para executar ações ou ajustes específicos após a renderização, como adicionar efeitos visuais pós-processamento.
OnRenderImage: chamada após a renderização da câmera e permite que você modifique a imagem renderizada antes de ser exibida na tela.
Ordem de execução: OnDrawGizmos
É uma função do MonoBehaviour que permite desenhar gizmos (auxílios visuais) na cena.
E também para ajudar no desenvolvimento e depuração do jogo, úteis para visualizar informações, como pontos de spawn, áreas de detecção ou caminhos de movimento, diretamente na janela da cena do Unity.
Pois, os gizmos são visíveis apenas na janela da cena do Unity e não são renderizados no jogo final.
OnGUI
É uma função do MonoBehaviour que era muito usada para criar interfaces de usuário (UI), usando o sistema de UI imediato (IMGUI).
A função OnGUI é chamada a cada frame do jogo e pode ser usada para desenhar elementos de UI, como botões, caixas de texto e sliders, diretamente na tela.
Atualmente essa função foi amplamente substituído pelo sistema de UI mais moderno e eficiente, o Unity UI (uGUI).
yield WaitForEndOfFrame
É usada para pausar a execução da corrotina até o final do frame atual, após todas as atualizações e renderizações terem sido concluídas.
E isso é útil quando você deseja executar ações que dependem dos resultados finais de outros sistemas no mesmo frame, como capturar uma imagem da tela ou efeitos de pós-processamento.
OnApplicationPause
Está função é chamada quando o aplicativo é pausado, e é muito útil para lidar com eventos que ocorrem quando o aplicativo perde ou recupera o foco.
Por exemplo, quando o usuário alterna para outro aplicativo ou bloqueia a tela do dispositivo.
OnApplicationQuit
É uma função chamada quando o aplicativo está prestes a ser encerrado.
Essa função é útil para lidar com eventos que ocorrem antes de o aplicativo ser fechado, como salvar o progresso do jogo, liberar recursos ou executar outras ações de limpeza.
OnDisable
Função chamada quando o script é desativado ou o objeto ao qual está anexado é destruído.
Essa função é útil para, interromper ações em andamento, desativar temporizadores ou executar outras ações de limpeza.
OnDestroy
OnDestroy é chamada quando o objeto ao qual o script está anexado é destruído.
Essa função é útil para, liberar recursos, interromper ações em andamento ou executar outras ações de limpeza.
Logo abaixo um vídeo completo para você entender com mais detalhes como funciona a inicialização na Unity!
Seja o primeiro a comentar.