Menu
CoddyTech

Referências vencem Find

Parte da seção Noções básicas de scripting no Unity do Journey de Unity da Coddy. Lição 45 de 67.

Um script pode acessar outro objeto de quatro maneiras: um campo definido no Inspector, GameObject.Find pelo nome, uma busca por tag ou FindAnyObjectByType pelo tipo. Para um objeto que está na cena desde o início, o código do Unity usa o campo do Inspector, por três motivos:

  • Velocidade. A referência é preenchida antes do início do jogo. Cada busca percorre os objetos da cena, e uma busca em Update() faz isso a cada quadro.
  • Segurança. Um nome em uma string deixa de funcionar quando alguém renomeia o objeto: Find retorna null e o erro aparece depois, na linha que o usa. Um campo vazio do Inspector gera UnassignedReferenceException, que indica o campo e o script.
  • Clareza. O Inspector mostra de que o script depende. Uma chamada Find oculta essa dependência dentro do código.
// definido uma vez no Inspector: sem buscas, e renomear não altera nada
[SerializeField] private Transform door;

// buscado a cada quadro, e null depois que a porta é renomeada
void Update()
{
    Transform d = GameObject.Find("Door").transform;
}

As buscas têm seu lugar: objetos que só existem depois que o jogo começa, como um objeto instanciado durante o jogo, e scripts que precisam funcionar em qualquer cena. Mesmo nesses casos, faça a busca uma vez em Start() e mantenha o resultado em um campo.

Experimente você mesmo

Esta lição não inclui um desafio de código.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Noções básicas de scripting no Unity