Das ist mir noch nie passiert, deshalb bin ich ein bisschen verwirrt.
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
Dies löst einen Fehler aus, aber das Objekt wird tatsächlich instanziiert und alles funktioniert wie beabsichtigt. Der Fehler stoppt das Programm nicht, egal wie oft ich das reproduziere.
Kann ich diesen Fehler ignorieren oder gibt es ein Problem, das ich nicht sehe?
Antworten:
Wenn das Objekt korrekt instanziiert wird, obwohl die
Intantiate()
Zeile eine Ausnahme auslöst, kommt der Fehler von einer anderen Instanz des Skripts. Möglicherweise befindet sich versehentlich eine zweite Kopie in Ihrer Szene.Eine Instanz ist ordnungsgemäß konfiguriert und führt die
Instantiate()
erwartungsgemäße Ausführung ohne Fehler aus, sodass das Objekt wie gewünscht erstellt wird.Eine andere Instanz ist falsch konfiguriert und löst einen Fehler aus. Wenn Sie sich jedoch nur die korrekt konfigurierte Instanz ansehen, scheint dieser Fehler von ungefähr zu kommen und hat keine sichtbare Konsequenz.
Sie können den Pfad zum Objekt beim Start oder bei einer Nullprüfung direkt vor der betreffenden Zeile ausdrucken, um unerwünschte Szenen-Duplikate aufzuspüren.
Sie sollten diesen Fehler auf keinen Fall ignorieren.
Bestenfalls werden unnötig Rechenzyklen gebrannt. Im schlimmsten Fall ist dies ein Zeichen dafür, dass Ihr Spiel etwas tut, das Sie nicht vollständig verstehen, und dass dies die Ursache für weitaus größere Probleme auf der ganzen Linie sein kann.
quelle
Antworten
Lassen Sie mich zunächst Ihre Frage direkt beantworten:
Sie könnten . Sie sollten nicht, weil es bedeutet, dass etwas schief geht. Sie würden sich an diesen Fehler gewöhnen, aber er könnte sich "verstecken" oder einen anderen Fehler verursachen.
Derzeit haben Sie eine Fehlermeldung und es funktioniert immer noch richtig. Umgekehrt ist es weitaus schlimmer, wenn es nicht funktioniert und kein Feedback hat (oder besser gesagt: es nicht erkennt), warum!
Rat
Um herauszufinden, woher das kommt, teilen Sie das Ganze in mehrere Zeilen auf.
Ein Fehler gibt nur an, in welcher Zeile er aufgetreten ist. Wenn der Fehler in diesem Code auftritt, erfahren Sie anhand der Zeilennummer, welcher Teil hier falsch lief. Außerdem würde ich raten, die generische Version von zu verwenden
Resources.Load
, die uns tatsächlich einen Schritt weniger Zeit lässt, uns Sorgen zu machen:Finden Sie heraus, warum
Instantiate()
.prefab
alsonull
.Resources.Load
Renditenull
.Resources.Load
" Gibt das Asset zurück,path
wenn es gefunden wird, andernfalls wird null zurückgegeben. "resourceLocation
) nicht gefunden wird.Irgendetwas stimmt mit diesem Pfad nicht. Der naheliegende erste Schritt wäre also, mit Debug.Log zu sehen, wie es tatsächlich ausgeht. Da "alles wie beabsichtigt funktioniert", ist es wahrscheinlich, dass eine Verdoppelung stattfindet, bei der eine Version funktioniert, und die andere gibt Ihnen diesen Fehler.
In diesem Fall ist es ratsam, die 2-Parameter-Version von Debug.Log zu verwenden
Debug.Log(resourceLocation, gameObject);
. Wenn Sie nun im Unity-Editor auf die Protokollnachricht klicken, wird der Ursprung ausgewähltGameObject
.quelle