Antworten
Lassen Sie mich zunächst Ihre Frage direkt beantworten:
es funktioniert, kann ich den Fehler ignorieren?
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.
string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;
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:
string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);
Finden Sie heraus, warum
- Ein wenig Erfahrung mit Unity zeigt uns, dass das Objekt, das Sie instanziieren möchten, null ist
Instantiate()
.
- Das heißt
prefab
also null
.
- Das heißt also
Resources.Load
Rendite null
.
- In der Dokumentation zu
Resources.Load
" Gibt das Asset zurück, path
wenn es gefunden wird, andernfalls wird null zurückgegeben. "
- Das bedeutet, dass der angegebene Pfad (der von mir aufgerufene String
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ählt GameObject
.