Ich habe eine Szene, die ich neu laden möchte, wenn ein Player ausfällt. Ich tue dies mit SceneManager.LoadScene("MainScene");
aber dann habe ich diesen Fehler:Zurücksetzen des Ereignis-Abonnements beim Zurücksetzen der Szene (Nachladen)
MissingReferenceException: The object of type 'AudioSource' has been destroyed but you are still trying to access it.
Nach einigem Graben fand ich, dass das Problem von mir Ereignissen verursacht wird. Es sieht so aus, als seien die Abonnenten der vorherigen Szene noch aktiv und suchen nach Objekten, die bereits zerstört wurden. So Fragen sind:
- Ist es möglich, irgendwie alle Teilnehmer zu löschen, oder muss ich sie abmelden einzeln vor dem Laden neuer Szene?
- (Ich weiß, dass ich das nicht fragen sollte, aber ...) Können Sie mich auf ein Tutorial oder ein Beispiel für einen einfachen Event Manager hinweisen? Ich denke über eine statische Klasse nach, die meine Eventhandler umschließt und es mir ermöglicht, Abonnements zu verwalten.
Nachdem ich meine Frage geschrieben habe, habe ich den OnDisable() Weg versucht und es funktioniert, aber ich wartete auf einige Antworten, weil diese Lösung mir nicht sehr elegant erschien. Danke –
In der OnDisable() Funktion zu tun ist der richtige Weg. Es ist garantiert, jedes Mal zu arbeiten. Sie können die Ereignismethode "Alle löschen" verwenden oder Ihren eigenen Event Manager erstellen, wenn Sie möchten. Hier erfahren Sie, wie Unity Ereignisse behandelt: https://unity3d.com/learn/tutorials/modules/intermediate/scripting/events – Programmer