Unity Hängt sich immer wieder auf?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Beim Domain Reloading wird der Zustand deiner Skripte zurückgesetzt, sodass du beim nächsten Wechsel in den Play-Modus wieder den Initialzustand hast. Insofern könnte die Problemursache tatsächlich in deinen Skripts oder deinen Packages liegen.

Prüfe zunächst, ob du Ressourcen (wie Datenbankverbindungen, Netzwerkverbindungen, Streams, u.ä.) in deinen Skripts richtig handhabst. Sie sollten beispielsweise bei Stop/Beendigung richtig geschlossen und im Speicher wieder freigesetzt werden (Dispose). Ein anderer Grund könnte eine ausgelöste Endlosrekursion sein (z.B. in der Serialisierung oder Event Handlers wie OnEnable, OnDisable).

Ob und wenn ja, an welchem externen Asset oder Plugin es liegen könnte, ist wiederum etwas schwieriger zu prüfen. Entweder man probiert es mit Entfernen/Einfügen (in einem neuen / duplizierten Projekt; nicht genutzte Plugins sollten prinzipiell raus) oder (was generell hilfreich wäre) man betrachtet die Unity-Prozesse einmal unter einem Profiler, um zu sehen, an welcher Ressource sich der Prozess aufhängt. Dieser Thread aus dem Unity-Forum stellt eine Methodik vor, um den Call Stack auszulesen.

Wenn du bei deinen Analysen nichts findest, wäre es ebenso noch eine Alternative, Domain Reloading einfach auszuschalten. Statische Felder musst du dann allerdings selbst zurücksetzen und statische Event Handler selbst abmelden. Im Unity Manual steht mehr dazu (s. Domain Reloading).

Ein paar weitere Vorschläge zum Ausprobieren:

  • Deaktiviere den Burst Compiler im Editor (Jobs > Enable Burst Compilation; zumindest in den Unity 2022er-Versionen gab es deswegen noch Probleme)
  • Ändere das Refresh-Verhalten (Edit > Preferences > General: Script Changes While Playing = Stop Playing And Recompile)
  • Der Artikel Faster Unity Script Changes listet mehrere allgemeine Punkte auf, die im Zusammenhang mit dem Script-Reload stehen bzw. für eine Abhilfe sorgen können (z.B. Softwareaktualisierungen, Cache Restores, etc.)
  • Starte Unity mit Administratorrechten