diff --git a/Assets/Scripts/Game/UserInterface/UserInterfaceWindow.cs b/Assets/Scripts/Game/UserInterface/UserInterfaceWindow.cs index cb09507462..834992a586 100644 --- a/Assets/Scripts/Game/UserInterface/UserInterfaceWindow.cs +++ b/Assets/Scripts/Game/UserInterface/UserInterfaceWindow.cs @@ -128,7 +128,7 @@ public void CloseWindow() { uiManager.PopWindow(); RaiseOnCloseHandler(); - Resources.UnloadUnusedAssets(); + DaggerfallGC.ThrottledUnloadUnusedAssets(); } public void PopWindow() diff --git a/Assets/Scripts/Internal/DaggerfallGC.cs b/Assets/Scripts/Internal/DaggerfallGC.cs new file mode 100644 index 0000000000..5f2cf5951b --- /dev/null +++ b/Assets/Scripts/Internal/DaggerfallGC.cs @@ -0,0 +1,36 @@ +// Project: Daggerfall Tools For Unity +// Copyright: Copyright (C) 2009-2020 Daggerfall Workshop +// Web Site: http://www.dfworkshop.net +// License: MIT License (http://www.opensource.org/licenses/mit-license.php) +// Source Code: https://github.com/Interkarma/daggerfall-unity +// Original Author: Pango (petchema@concept-micro.com) +// Contributors: +// +// Notes: +// + +using System; +using UnityEngine; + +namespace DaggerfallWorkshop +{ + public static class DaggerfallGC + { + // Min time between two unused assets collections + private const float uuaThrottleDelay = 180f; + + private static float uuaTimer = Time.realtimeSinceStartup; + + public static void ThrottledUnloadUnusedAssets() + { + if (Time.realtimeSinceStartup >= uuaTimer) + ForcedUnloadUnusedAssets(); + } + + public static void ForcedUnloadUnusedAssets() + { + Resources.UnloadUnusedAssets(); + uuaTimer = Time.realtimeSinceStartup + uuaThrottleDelay; + } + } +} diff --git a/Assets/Scripts/Internal/DaggerfallGC.cs.meta b/Assets/Scripts/Internal/DaggerfallGC.cs.meta new file mode 100644 index 0000000000..6c1fab4ddc --- /dev/null +++ b/Assets/Scripts/Internal/DaggerfallGC.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70ef55862ca84432ba15b526522f7ae3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Terrain/StreamingWorld.cs b/Assets/Scripts/Terrain/StreamingWorld.cs index 49cd7fd72b..411307f4cb 100644 --- a/Assets/Scripts/Terrain/StreamingWorld.cs +++ b/Assets/Scripts/Terrain/StreamingWorld.cs @@ -659,7 +659,7 @@ private IEnumerator UpdateTerrains() if (init) { DaggerfallUnity.Instance.MaterialReader.PruneCache(); - Resources.UnloadUnusedAssets(); + DaggerfallGC.ThrottledUnloadUnusedAssets(); } // Set terrain neighbours