Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Diferença entre o SerializedField e o FindObjectOfType

Olá a todos, eu tenho uma duvida, qual é a diferença entre utilizar uma variavel com a notação SerializedField e depois na Unity atribuir o objeto arrastando e soltando pela interface e ter apenas uma variavel privada e atribuir ela pelo código utilizando o GameObject.FindObjectOfType()?

Percebi que em alguns casos, as duas formam funcionam, mas existe alguma diferença de performance? Ou é apenas uma questão de boas práticas?

Grata.

1 resposta
solução!

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 ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software