• Gabriel Dechichi

Lista dos erros mais comuns na Unity em 2021 (E soluções)

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



103 visualizações0 comentário