Kokujou Geschrieben 13. Juli 2019 Melden Share Geschrieben 13. Juli 2019 Hallihallo. Ich stehe mal wieder vor einem völlig unverständlichen Unity-Problem. Mein Code (warum gibts eigentlich kein C#? 😞 StopAllCoroutines(); Global.instance.StopAllCoroutines(); Global.MovingCards = 0; SceneManager.LoadScene(SceneManager.GetActiveScene().name); throw new Exception(); Sieht richtig aus oder? Nein. Sieht sogar viel zu umfangreich aus, da ich gelesen habe, dass Unity Coroutinen automatisch beenden sollte beim laden einer Szene. Nun erkläre man mir bitte diesen abaritgen Effekt: Zum Kontext: Ich lade eine Szene indem ich mir ein Deck generiere, von diesem Deck die Hände und das Spielfeld austeile und das alles passiert in Coroutinen. Und nur falls eventuell die Instanzen dabei eine rolle spielen hab ich auch einen globalen Singleton die Funktion aufrufen lassen. die MovingCards ist eine Zahl die mehr oder weniger die Anzahl der aktuellen Animationen angibt. Und nur um sicher zu gehen dass nicht eventuell doch noch irgendwo irgendwas ausgeführt wird nachdem die Szene geladen wird schmeiße ich danach eine Exception raus. Natürlich habe ich es zu allererst mit dem Einzeiler probiert, der Rest code soll nur zeigen was ich schon alles versucht habe. Ich hab auch mal explizit den Single Parameter in der Lade-Funktion angegeben - ohne Erfolg. Ich weiß nichtmal wo ich anfangen soll zu raten wo dieser Fehler überhaupt herkommt also hoffe ich von euch die Erleuchtung zu erhalten. Edit: Ich sollte eventuell erwähnen dass ich diese Funktion mehrfach als Test aufrufe. Die Szene wird etwa 10mal hintereinander neugeladen. Das läuft so ab: Szene lädt -> Deck generiert -> Karten ausgeteilt -> Szene neuladen -> ... Ein zufälliges event hält diese Schleife aktuell aus. Vielleicht macht das ja irgendwas kaputt... keine ahnung... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Juli 2019 Melden Share Geschrieben 13. Juli 2019 vor 3 Stunden schrieb Kokujou: warum gibts eigentlich kein C#? Wir haben da mal ne Weile rumprobiert, aber das Plugin hat sich mega quergestellt... ich benutze einfach C, ist ähnlich genug vor 3 Stunden schrieb Kokujou: Sieht richtig aus oder? Nein. Sieht sogar viel zu umfangreich aus, da ich gelesen habe, dass Unity Coroutinen automatisch beenden sollte beim laden einer Szene. Coroutines laufen auf MonoBehaviours, also deinen Script-Komponenten. Wenn die Komponente zerstört wird, sei es direkt, durch Zerstörung des GameObjects oder durch das Entladen der Szene, dann läuft sie natürlich nicht mehr weiter. Wenn eine Coroutine nach Laden einer neuen Szene noch läuft, dann liegt das daran, dass die MB-Komponente, auf der sie läuft, noch existiert, also durch DontDestroyOnLoad am Leben gehalten wird. vor 4 Stunden schrieb Kokujou: Ich weiß nichtmal wo ich anfangen soll zu raten wo dieser Fehler überhaupt herkommt also hoffe ich von euch die Erleuchtung zu erhalten. Ich weiß ehrlich gesagt nicht, wo dein Fehler liegt. Ich sehe da einen Screenshot mit nem Hintergrundbild, nen Haufen Karten und etwas IMGUI drüber. Da ich nicht weiß, was du eigentlich haben willst, weiß ich nicht, wo der "abartige Effekt" ist Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 14. Juli 2019 Autor Melden Share Geschrieben 14. Juli 2019 naja man sollte erkennen dass ein spielfeld nicht so aussehen sollte normalerweise werden 3 Gebiete ausgeteilt, Feld, Hand1, Hand2 stattdessen wird die Hand-Auffächern-Animation jetzt auf dem Deck getriggert und dann fliegen noch überall anders irgendwelche kartenrum nachdem das hauptspielfeld längst aufgebaut wurde... Ja, ich habe eine komponente die nicht gelöscht werden darf. Aber darum rufe ich ja auch Stopallcoroutines auf und das sogar auf der Instanz dieses Objekts. also... ????? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. Juli 2019 Melden Share Geschrieben 14. Juli 2019 vor 46 Minuten schrieb Kokujou: naja man sollte erkennen dass ein spielfeld nicht so aussehen sollte Was weiß ich denn, wie dein Spielfeld auszusehen hat? Ich weiß ja nichtmal, was das für ein Spiel ist oder welche Regeln es hat. Bin nicht in deinem Kopf drin vor 47 Minuten schrieb Kokujou: stattdessen wird die Hand-Auffächern-Animation jetzt auf dem Deck getriggert und dann fliegen noch überall anders irgendwelche kartenrum nachdem das hauptspielfeld längst aufgebaut wurde... Werden denn die Karten gelöscht, die bereits existieren, wenn du die Szene wechselst? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 24. August 2019 Autor Melden Share Geschrieben 24. August 2019 sollten sie zumindest, aber nicht explizit. Der Sinn ist es ja irgendwie zu sagen es soll absolut alles in den Müll geschmissen werden außer das was explizit als nicht zu löschen gekennzeichnet wurde und das sind nur virtuelle daten, ekine GO. was ich will ist im prinzip das spiel solange aus und wieder anschalten bis es klappt nur halt muss ich auch in der richtigen szene mit richtigen umgebungsvariablen einsteigen können. Ich hatte gehofft es gibt die einfache variante über Unitys Szenen aber da hab ich mich wohl geshcnitten... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 27. August 2019 Melden Share Geschrieben 27. August 2019 Hast Du mal probiert, die Szene vorher zu entladen, auch wenn es theoretisch keinen Sinn ergibt? SceneManager.sceneUnloaded += OnSceneUnloaded; SceneManager.UnloadSceneAsync(SceneManager.GetActiveScene().name); private void OnSceneUnloaded(Scene current) { SceneManager.sceneUnloaded -= OnSceneUnloaded; SceneManager.LoadScene(current.name); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.