Unity MissingReferenceException, wie beheben?
Moin,
ich habe folgendes Problem. In meinem 2D Spiel werden nach dem Szenenwechsel 2 Tilemaps, die die Exception hervorrufen nicht mehr gefunden. Wenn man das Spiel startet, funktioniert alles wie gewollt. Nach dem Szenenwechsel und dem Betreten der Hauptszene, wird dann diese Exception hervorgerufen.
Die Tilemaps sind da, und haben beide einen eigenen Tag, um sie in der Start-Methode meines CropManagers zu finden, die immer nach dem Szenenwechsel in die Hauptszene ausgeführt wird.
Hier ein bisschen vom Code:
public Tilemap cropTilemap;
public Tilemap groundTilemap;
private void Start() {
cropTilemap = GameObject.FindGameObjectWithTag("CropMap")
.GetComponent<Tilemap>();
groundTilemap = GameObject.FindGameObjectWithTag("GroundMap")
.GetComponent<Tilemap>();
}
Das sind Zeilen die anscheinend nicht funktionieren. Wie gesagt, beim Start des Spiels bei dem man in der Hauptszene spawnt, funktioniert alles. Wenn ich dann aber in eine andere Szene gehe und wieder zurück in meine Hauptszene, kommt wenn ich sowas versuche:
cropTilemap.SetTile(...);
eben dieser Fehler. Kann mir da spontan jemand helfen? Hab im Internet nix gefunden und auch so keine Idee weil das eigentlich passen sollte.
Vielen Dank schonmal
Hier nochmal der ganze Fehlercode:
MissingReferenceException: The object of type 'Tilemap' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
1 Antwort
Die Objekte werden beim Laden einer neuen Szene zerstört. Du kannst ihnen ein Skript zuordnen, welches das verhindert.
using UnityEngine;
public class DoNotDestroy : MonoBehaviour
{
void Awake()
{
DontDestroyOnLoad(gameObject);
}
}
Weiteres zu DontDestroyOnLoad kannst du in der Referenz nachlesen.
Danke, aber ich habe den Fehler gefunden. Ich habe in der Start-Methode ein Event subscribed, aber am ende nicht unsubscribed. Das war der Fehler.