C# na Unity pode ser extremamente desafiador para os programadores iniciantes no desenvolvimento de jogos.
E isso se agrava quando o estudante nunca teve contato antes com a criação de jogos.
Mas, nesse artigo vamos te ajudar a compreender melhor as funções básicas em C# na Unity.
C#: Funções básicas na Unity
Quando nos deparamos pela primeira vez com um script, ele vem com um padrão clássico pré definido.
E que contem uma classe com o Nome do script, e duas funções já criadas: um Start e um Update.
E essas duas funções são a base para todo o script, e a partir delas que criaremos toda a lógica e funcionamento do sistema.
Pois, o Start é chamado 1 vez quando iniciamos o jogo, e o Update é chamado a cada frame.
Ou seja, se o seu jogo está rodando a 60 quadros por segundo, ou seja, 60 fps, seu Update é lido também 60 vezes em 1 segundo.
Mas a confusão começa de fato quando nos deparamos com mais outras duas funções: Awake e FixedUpdate.
Pois, a princípio elas podem parecer funcionar de maneira idêntica ao Start e Update.
Mas, existem detalhes bem cruciais em cada uma delas, então vamos entender uma por uma!
Awake
Vamos te apresentar cada função na ordem correta com que ela é lida na inicialização da Unity, começando pelo Awake.
E o método Awake é chamado apenas uma vez durante o ciclo de vida de um objeto, quando ele é criado ou ativado pela primeira vez.
Ou seja, quando você dá play, todas as funções Awakes em todos os scripts do jogo serão as primeiras a serem lidas.
Por isso, ela é frequentemente usado para inicializar variáveis ou configurar referências para outros objetos.
Mas, o detalhe crucial aqui é que ele é executada antes de qualquer método Start, em qualquer script.
E assim sempre que você precisar que algo aconteça já no início do jogo, você usará o Awake ou Start.
Mas quando devo usar um ou outro? Vamos conhecer o Start antes de responder a isso!
Start
O método Start é chamado uma vez após o método Awake, mas antes do primeiro frame do jogo.
E é comumente usado para configurações adicionais que dependem de outros objetos estarem prontos.
E sendo muito útil para inicializar configurações que devem estar prontas antes do início do jogo.
Ou seja, às duas funções são idênticas, com a exceção de o Awake ser lido antes de todos os Starts, qual usar?
C#: Awake ou Start?
Em seu jogo você quer que ao dar play, seja executada uma música, e você tem dois scripts.
Ou seja, um para dar o comando de tocar a música e outro para salvar qual música será tocada.
Mas se você salvar a música e mandar dar play, tudo no Start, pode dar erro.
Pois, o comando de dar play pode ser lido antes de a música ter sido salva.
E então o sistema não saberá qual é a música a ser tocada.
E podemos corrigir esse erro trocando o comando que salva a música para um Awake, e o comando de dar play para o Start.
Pois, assim garantimos que primeiro a música será salva, no comando Awake antes de qualquer Start ser executado.
E só após os Awakes serem lidos é que o Start será lido, e consequentemente o comando de play.
Resumindo o Awake ajuda demais a solucionar aqueles erros de referência chatos em seus projetos.
Update
O método Update é chamado a cada frame do jogo, se está rodando a 30, ele é lido 30 vezes por segundo.
E nessa função é onde a maioria das lógicas de jogo em tempo real, como movimento, capturas de input, são geralmente colocadas.
Pois, o Update será lido o tempo todo ao longo de toda a gameplay do seu jogo.
Por isso precisamos usar essa função com cautela pois, ela tem um alto risco de pesar no processamento.
FixedUpdate
O método FixedUpdate é chamado em intervalos fixos de tempo, independentemente da taxa de quadros do jogo.
Ou seja, diferente do Update que varia conforme os FPS do jogo, podendo ser lidos a 30, 45, 60, etc.
O FixedUpdate não, pois, sempre será lido em uma mesma taxa fixa de atualização constante.
E é usado principalmente para física, como movimento de objetos rígidos ou simulações físicas.
Garantindo uma física igual e consistente em diferentes dispositivos, seja celular, computador, consoles, etc.
Update ou FixedUpdate?
Use Update para lógica que não está diretamente relacionada à física.
Como, por exemplo, movimento de personagens, inputs do jogador, animações, contadores simples, etc.
E use FixedUpdate para lógica que envolve física, como mover objetos que tenham o componente Rigidbody.
E simulações de física, detecção de colisões que envolvem física, capturas de Raycasts, etc.
Por exemplo, se você está movendo seu player através do componente de física.
A captura de input deve ser lida no Update e o código que move através do Rigdbody deve estar no FixedUpdate.
Mas, se caso essa movimentação não usasse a física, e fosse feita pelo transform apenas.
Os inputs e código de movimentação deveriam ficar no Update, por exemplo, por não usar a física.
Resumindo, o FixedUpdate só se faz necessário para comandos e cálculos que envolvem física.
Estudar programação C# desde a base pode parecer complexa, mas é muito simples quando nos atentamos aos detalhes.
E principalmente ao buscar entender exatamente o que cada função, código e comando faz, não apenas decorando.
Porém, você pode ter acesa a um método de ensino amplamente validado e eficaz que vem ensinando inúmeros desenvolvedores.
Saindo do zero mesmo que nunca tenham estudado programação e criação de jogos antes.
Com o Curso Start Gamedev você pode dar o start mais certeiro e começar hoje mesmo com o pé direito.
Seja o primeiro a comentar.