Isso nunca aconteceu comigo, então estou um pouco confuso.
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
Isso gera um erro, mas o objeto é realmente instanciado e tudo funciona como pretendido. O erro não interrompe o programa, não importa quantas vezes eu o reproduza.
Posso ignorar esse erro ou há algum problema que não estou vendo?
Respostas:
Se o objeto for instanciado corretamente, apesar da
Intantiate()
linha lançar uma exceção, o erro será proveniente de outra instância do script - você pode acidentalmente ter uma segunda cópia em sua cena.Uma instância está configurada corretamente e executando o
Instantiate()
conforme o esperado, sem erros, para que o objeto seja criado conforme desejado.Outra instância está configurada incorretamente e gera um erro. Mas se você estiver apenas olhando para a instância configurada corretamente, esse erro parecerá vir do nada e não terá conseqüências visíveis.
Você pode imprimir o caminho para o objeto em Iniciar - ou em uma verificação nula antes da linha incorreta - para ajudar a rastrear duplicatas indesejadas da cena.
Você absolutamente não deve ignorar esse erro.
Na melhor das hipóteses, está queimando ciclos de computação desnecessariamente. Na pior das hipóteses, é um sinal de que seu jogo está fazendo algo que você não entende completamente, e que pode ser a raiz de problemas muito maiores no futuro.
fonte
Responda
Deixe-me começar por responder sua pergunta diretamente:
Você poderia . Você não deveria , porque significa que algo está errado. Você se acostumaria com esse erro, mas ele poderia "ocultar" ou causar outro erro.
Atualmente você tem uma mensagem de erro e ainda funciona corretamente. Por outro lado, ele não funciona e não tem (ou melhor: não reconhece) feedback por que, é muito pior!
Adendo
Para descobrir de onde isso vem, divida tudo isso em várias linhas.
Um erro informa apenas em que linha aconteceu. Se o erro ocorrer neste código, o número da linha informará mais sobre qual parte deu errado aqui. Além disso, aconselho o uso da versão genérica de
Resources.Load
, que na verdade nos daria um passo a menos para nos preocuparmos:Descobrir o porquê
Instantiate()
.prefab
énull
.Resources.Load
retornosnull
.Resources.Load
diz " Retorna o ativo empath
se ele puder ser encontrado; caso contrário, retorna nulo " .resourceLocation
)Algo está errado com esse caminho; portanto, o primeiro passo óbvio seria ver o que realmente acaba sendo, com o Debug.Log. Como "tudo funciona como pretendido", é provável que exista alguma duplicação em que uma versão funcione e a outra dê esse erro.
Nesse caso, é uma boa ideia usar a versão de 2 parâmetros do Debug.Log
Debug.Log(resourceLocation, gameObject);
. Agora, se você clicar na mensagem de log no editor do Unity, ele selecionará deGameObject
onde veio.fonte