Erros de referência são muito comuns, não apenas quando somo iniciantes, mas ao decorrer do desenvolvimento.
E mesmo desenvolvedores experientes enfrentam problemas com erros de referência.
Mas, vamos hoje te dar dicas de como minimizar esse problema na codificações dos seus scripts!
Lógica de referência

Na Unity ao codificar os nossos scripts precisamos dizer exatamente qual será o componente a ser manipulado ou acessado.
E o erro de referência acontece justamente no momento em que tentamos acessar ou manipular esses componentes.
Pois, você dá comando para executar algo, mas o componente não foi referenciado e isso retornará um erro.
E sabendo a primeira obrigação de um programador é saber quando referenciar, componentes e variáveis.

E a sequência correta é a seguinte: criar uma variável para armazenar esses componentes.
Porém, agora precisamos no próximo passo armazenar esse componente nessa variável.
E ai sim, com ele devidamente referenciado, podemos finalmente manipular esse componente.
E essa sequência serve para tudo, criar variável, referencia e por último acessar.
Onde fazer a referência?

Existem 2 formas mais comuns de se fazer essa referência, automática ou manual.
E a forma automática é o próprio script que fará a referência em tempo de execução de jogo.
E aqui é preciso seguir a risca a sequência de criar variável, referenciar e acessar.
Mas, normalmente a maioria dos programadores prefere já fazer essa referência logo ao dar play no jogo.
E para isso podemos usar as funções Awakes ou Starts, que são chamadas uma vez ao dar play no game.

E já garantindo assim que o componente possa ser manipulado a qualquer momento necessário posteriormente.
Mas, a forma manual seria basicamente criar a variável no script e deixa-la publica ou serializada.
Pois, assim essa variável é acessível pelo inspector, bastando você arrastar esse componente para referencia-lo na variável.
Start ou Awake?
Muitos acreditam que Starts e Awakes são a mesma coisa e tanto faz usar um ou outro.
E sim eles são chamados uma vez ao iniciar o jogo, mas tem uma diferença crucial do porque usá-los.
E está no fato de que o Awake inicializa antes do Start na ordem de execução do script.
Mas, esse simples motivo permite que em diversos momentos façamos a referência no Awake.
E o acesso para manipular o componente no Start, e isso acontece muito durante o desenvolvimento de um jogo.

E dessa forma sempre que precisar executar um comando já no Start, é crucial que faça a referência no Awake.
Por isso, sempre planeje as suas mecânicas levando esse detalhe em consideração.
O simples fato de entendermos o funcionamento dos nossos scripts e da Unity, já permite evitar esses problemas.
E também desenvolvermos até outra solução, conforme ganhamos experiência.
Mas não existe uma maneira melhor de ganhar experiência senão praticando diariamente.
E quando podemos praticar tendo um instrutor, é ainda melhor, pois, aprendemos muito mais rapidamente.
Por isso indicamos para você o curso StartGamedev que é estruturado, com aulas saindo do zero.
E te ajudando a criar seu primeiro jogo mesmo que não saiba nada de programação ou desenvolvimento.
Você pode saber mais clicando neste texto ou na Imagem, e até conferir abaixo um vídeo review de um de nossos alunos.
Seja o primeiro a comentar.