public void Dispose() { if (ActiveScene != null) { ActiveScene.Dispose(); ActiveScene = null; } GC.SuppressFinalize(this); }
internal static void Shutdown() { // Deal with active scene ActiveScene?.QueueChange(false); ActiveScene?.Remove(); ActiveScene?.Dispose(); ActiveScene = null; // Might be a queued scene s_queuedScene?.Dispose(); s_queuedScene = null; // Deal with other cached states s_isDisposing = true; s_scenes.ForEach(scene => scene.Dispose()); s_scenes.Clear(); s_isDisposing = false; }
// Called to perform the actual transition between active scenes private static void DoSceneChange() { // Remove the current scene, and GC collect as there may be many objects released in the disposal ActiveScene?.Remove(); ActiveScene?.Dispose(); if (ActiveScene != null) { GC.Collect(); } // Load the new scene, and GC collect to remove the many temporary objects created during loading ActiveScene = s_queuedScene; ActiveScene?.Start(); s_queuedScene = null; if (ActiveScene != null) { GC.Collect(); } SceneChanging = false; }