Olá, Gabrielly! Como vai?
O atributo [SerializeField]
é uma anotação que você coloca antes de uma variável privada no Unity para que ela apareça no editor Unity e possa ser modificada. Isso é útil quando você quer ter a possibilidade de alterar o valor de uma variável privada sem ter que alterar o código. No exemplo que você está estudando, a velocidade e a variação da posição Y
dos obstáculos são definidas usando [SerializeField]
, para poderem ser ajustadas no editor Unity sem alterar o código.
Por outro lado, o método FindObjectOfType<T>()
é usado para encontrar um objeto em sua cena que possui um determinado componente. No exemplo do curso, ele é usado para obter uma referência ao objeto Aviao
e ao objeto Pontuacao
na cena.
Em termos de desempenho, o FindObjectOfType<T>()
pode ser mais lento se você tiver muitos objetos em sua cena, porque ele precisa percorrer todos eles para encontrar o que você está procurando. No entanto, na prática, a diferença de desempenho é geralmente insignificante a menos que você esteja chamando FindObjectOfType<T>()
muitas vezes por frame.
Mas, na questão de boas práticas, ambas as abordagens têm seus usos. Usar [SerializeField]
é uma boa prática quando você quer ser capaz de ajustar os valores de suas variáveis privadas no editor Unity. Usar FindObjectOfType<T>()
é uma boa prática quando você precisa obter uma referência a um objeto com um determinado componente, mas você não sabe ou não se importa com o nome exato do objeto.
No entanto, uma prática ainda melhor seria injetar as dependências através do construtor ou de um método de inicialização, em vez de usar FindObjectOfType<T>()
, pois isso torna suas dependências mais explícitas e seu código mais fácil de testar. Mas isso é um tópico mais avançado que você pode querer explorar depois de se sentir confortável com os conceitos básicos do Unity.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.