Menu
CoddyTech

Referências são melhores que Find

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 59 de 85.

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.

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity