Cela ne m'est jamais arrivé donc je suis un peu confus.
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
Cela génère une erreur mais l'objet est réellement instancié et tout fonctionne comme prévu. L'erreur n'arrête pas le programme, peu importe combien de fois je le reproduis.
Puis-je ignorer cette erreur ou y a-t-il un problème que je ne vois pas?
Réponses:
Si l'objet est instancié correctement malgré la
Intantiate()
ligne lançant une exception, alors l'erreur provient d'une autre instance du script - vous pourriez avoir accidentellement une deuxième copie dans votre scène.Une instance est configurée correctement et exécute
Instantiate()
comme prévu sans erreur, de sorte que l'objet est créé comme vous le souhaitez.Une autre instance n'est pas configurée correctement et génère une erreur. Mais si vous regardez simplement l'instance correctement configurée, cette erreur semblera provenir de nulle part et n'aura aucune conséquence visible.
Vous pouvez imprimer le chemin d'accès à l'objet au démarrage - ou dans un contrôle nul juste avant la ligne incriminée - pour aider à localiser les doublons de scène indésirables.
Vous ne devez absolument pas ignorer cette erreur.
Au mieux, il brûle inutilement des cycles de calcul. Au pire, c'est un signe que votre jeu fait quelque chose que vous ne comprenez pas complètement, et qui peut être à l'origine de problèmes beaucoup plus importants.
la source
Répondre
Permettez-moi de commencer par répondre directement à votre question:
Tu pourrais . Vous ne devriez pas, car cela signifie que quelque chose ne va pas. Vous vous habitueriez à cette erreur, mais cela pourrait "se cacher" ou provoquer une autre erreur.
Actuellement, vous avez un message d'erreur et cela fonctionne toujours correctement. Inversement, cela ne fonctionne pas et n'a pas (ou plutôt: ne reconnaît pas) de rétroaction pourquoi, c'est bien pire!
Conseil
Pour savoir d'où cela vient, divisez le tout en plusieurs lignes.
Une erreur vous indique uniquement à quelle ligne cela s'est produit. Si l'erreur se produit dans ce code, le numéro de ligne vous en dira plus sur la partie qui a mal tourné ici. De plus, je vous conseille d'utiliser la version générique de
Resources.Load
, qui nous donnerait en fait une étape de moins à craindre:Découvrir pourquoi
Instantiate()
.prefab
c'estnull
.Resources.Load
retoursnull
.Resources.Load
indique " Renvoie l'actif àpath
s'il peut être trouvé sinon renvoie null. "resourceLocation
)Quelque chose ne va pas avec ce chemin, donc la première étape évidente serait de voir ce qu'il finit par être, avec Debug.Log. Comme "tout fonctionne comme prévu", il est probable qu'il y ait duplication là où une version fonctionne et l'autre vous donne cette erreur.
Dans ce cas, c'est une bonne idée d'utiliser la version à 2 paramètres de Debug.Log
Debug.Log(resourceLocation, gameObject);
. Maintenant, si vous cliquez sur le message du journal dans l'éditeur Unity, il sélectionnera d'GameObject
où il vient.la source