Olá,
Nessa semana eu soltei um vídeo mostrarm os 3 passos que eu uso para resolver qualquer erro na Unity. E apesar desses 3 passos serem fundamentais, a verdade é que com o tempo você nota que os mesmos erros sempre aparecem de novo e de novo.
Por isso, você pode evitar muita dor de cabeça no seu projeto, se você souber de cara os erros mais comuns, e suas soluções, e é exatamente isso que vamos falar nesse post!
PS: Tem algum erro que te assombra e não está nessa lista? Entre em contato
Erros de Compilação
Unknown identifier:
Significado: Você usou algum nome (de variável, função, classe) que o compilador não conhece.
Solução: Isso pode ser porque tem um erro no nome (Ex: addForce ao invés de AddForce), por que você não definiu a variável, ou por que a variável está fora do escopo da função. A melhor solução é ir até a linha e analisar o seu código.
“;” (ou “)“, “}”, “]”) Expected
Significado: O compilador está esperando algum desse símbolos, e você provavelmente esqueceu de colocar, verifique se você abriu { e não fechou, ou escreveu uma linha sem ;.
Solução: Vá até a linha do código com o problema e verifique se tem algum simbolo desses faltando nessa linha, ou na linha acima.
The best method overload for function (…) is not compatible:
Significado: Os parâmetros que você está passando para uma função são incompatíveis com ela, ou seja, são diferentes dos parâmetros que ela espera.
Solução:
Vá até a linha onde o problema está ocorrendo, e tente escrever ela de novo com ajuda do Visual Studio. Quando você abre os parênteses da função, o Visual Studio te mostra as opções de Parâmetros que você pode passar.
Se for uma função da Unity, você pode pesquisar no Google “unity (nome do componente) (nome da funcao)”, e entrar no link do docs.unity.com, que ele dá exemplos de como usar a função.
Variable/Method is unacessible due to it’s protection level
Significado
O compilador está dizendo que você não pode acessar a variável ou método por que o nível de proteção dele (public, protected, private, internal) não permite que você tenha acesso.
Solução
Se o variável ou função inacessível fizer parte do seu código, considere se ela não deveria ter um nível de proteção menor (como public). Caso não, procure outra forma de fazer o que você quer fazer (os níveis de proteções não estão alí atoa).
Mais informações nesse vídeo.
Erros de Runtime
Unassigned Reference Exception
Significado
Diz que uma variável não teve seu valor assinalado (no inspector)
Solução
Clicar duas vezes no erro no Console, a Unity vai selecionar o objeto onde o erro aconteceu. Verificar se tem alguma variável de inspetor com valor vazio (None)
NullReferenceException
Significado
Similar ao UnassignedReferenceException, mas não é uma variável do inspetor (então não adianta olhar no inspetor por variáveis vazias).
Solucão
Isso é explicado em detalhes nesse vídeo. A única solução garantida é ir até a linha que acontece o erro e debugar o código (com Debug.Log ou usando o debugger) para ver qual variável está nula, e por quê.
Uma solução rápida (que pode ser a correta ou não), é adicionar um null check antes de usar a variável. Ex: if (myVariable != null). Mas muitas vezes isso pode só esconder o erro real, ao invés de resolver o problema, então use com cautela.
IndexOutOfReferenceException
Significado
Você está tentando acessar um elemento de um array ou lista, passando um índice (index) maior do que o número de elementos dessa lista, ou menor que zero (em resumo, o seu index está “fora dos limites” dessa lista).
Solução
Inspecione o seu código para tentar entender por quê isso está acontecendo (não tem caminho fácil)
Uma solução simples e rápida (que pode não ser a solução correta), é fazer um range check. Ex: if (index >= 0 && index < myList.Length). Isso verifica se o index está dentro dos limites do array, e evita que esse erro aconteça.
Outros erros comuns
Sem erros, mas nada acontece:
- Confira se você colocou o componente (Monobehaviour) no objeto
- Confira se os métodos nativos da Unity (Start, Update, Awake, etc) estão com os nomes certos
Can’t add script component:
- Verifique se o nome da classe, e o nome do arquivo, do componente que você quer adicionar são os mesmos
- Verifique que não tem nenhum erro de compilação