From 76f1cfb48efc5d8ed330bcdade796b079da8fb14 Mon Sep 17 00:00:00 2001 From: MichaelO Date: Mon, 29 Jul 2024 17:03:54 +0800 Subject: [PATCH] updated to v2.11.6 --- .../Scripts/Runtime/AssetLoaders.cs | 25 +++++++++++----- .../Scripts/Runtime/AssetPatcher.cs | 19 +++++++++++- .../Scripts/Runtime/Bundle/PackageManager.cs | 2 ++ .../Scripts/Runtime/Bundle/PatchLauncher.cs | 10 ------- .../Scripts/Runtime/Cacher/CacheBundle.cs | 30 +++++++++++++++++++ Assets/OxGFrame/CHANGELOG.md | 5 ++++ Assets/OxGFrame/package.json | 2 +- 7 files changed, 73 insertions(+), 20 deletions(-) diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoaders.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoaders.cs index 09bd1c5f..f7f36f98 100644 --- a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoaders.cs +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetLoaders.cs @@ -131,9 +131,15 @@ public static BundlePack LoadAdditiveScene(string packageName, string assetName, /// public static void UnloadScene(string assetName, bool recursively = false) { - if (AssetPatcher.IsInitialized()) + if (!AssetPatcher.IsReleased()) CacheBundle.GetInstance().UnloadScene(assetName, recursively); } + + public static void ReleaseBundleScenes() + { + if (!AssetPatcher.IsReleased()) + CacheBundle.GetInstance().ReleaseScenes(); + } #endregion #region Cacher @@ -413,12 +419,13 @@ public static T LoadRawFile(string packageName, string assetName, Progression public static void UnloadRawFile(string assetName, bool forceUnload = false) { if (RefineResourcesPath(ref assetName)) Logging.Print("【Error】Only Bundle Type"); - else if (AssetPatcher.IsInitialized()) CacheBundle.GetInstance().UnloadRawFile(assetName, forceUnload); + else if (!AssetPatcher.IsReleased()) CacheBundle.GetInstance().UnloadRawFile(assetName, forceUnload); } public static void ReleaseBundleRawFiles() { - CacheBundle.GetInstance().ReleaseRawFiles(); + if (!AssetPatcher.IsReleased()) + CacheBundle.GetInstance().ReleaseRawFiles(); } #endregion @@ -934,7 +941,7 @@ public static T InstantiateAsset(string packageName, string assetName, Transf public static void UnloadAsset(string assetName, bool forceUnload = false) { if (RefineResourcesPath(ref assetName)) CacheResource.GetInstance().UnloadAsset(assetName, forceUnload); - else if (AssetPatcher.IsInitialized()) CacheBundle.GetInstance().UnloadAsset(assetName, forceUnload); + else if (!AssetPatcher.IsReleased()) CacheBundle.GetInstance().UnloadAsset(assetName, forceUnload); } public static void ReleaseResourceAssets() @@ -944,7 +951,8 @@ public static void ReleaseResourceAssets() public static void ReleaseBundleAssets() { - CacheBundle.GetInstance().ReleaseAssets(); + if (!AssetPatcher.IsReleased()) + CacheBundle.GetInstance().ReleaseAssets(); } #endregion #endregion @@ -1123,12 +1131,13 @@ public static T LoadRawFile(int groupId, string packageName, string assetName public static void UnloadRawFile(int groupId, string assetName, bool forceUnload = false) { if (RefineResourcesPath(ref assetName)) Logging.Print("【Error】Only Bundle Type"); - else if (AssetPatcher.IsInitialized()) GroupBundle.GetInstance().UnloadRawFile(groupId, assetName, forceUnload); + else if (!AssetPatcher.IsReleased()) GroupBundle.GetInstance().UnloadRawFile(groupId, assetName, forceUnload); } public static void ReleaseBundleRawFiles(int groupId) { - GroupBundle.GetInstance().ReleaseRawFiles(groupId); + if (!AssetPatcher.IsReleased()) + GroupBundle.GetInstance().ReleaseRawFiles(groupId); } #endregion @@ -1649,7 +1658,7 @@ public static T InstantiateAsset(int groupId, string packageName, string asse public static void UnloadAsset(int groupId, string assetName, bool forceUnload = false) { if (RefineResourcesPath(ref assetName)) GroupResource.GetInstance().UnloadAsset(groupId, assetName, forceUnload); - else if (AssetPatcher.IsInitialized()) GroupBundle.GetInstance().UnloadAsset(groupId, assetName, forceUnload); + else if (!AssetPatcher.IsReleased()) GroupBundle.GetInstance().UnloadAsset(groupId, assetName, forceUnload); } public static void ReleaseResourceAssets(int groupId) diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetPatcher.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetPatcher.cs index f462fc3d..136da309 100644 --- a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetPatcher.cs +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/AssetPatcher.cs @@ -2,7 +2,6 @@ using OxGFrame.AssetLoader.Bundle; using OxGFrame.AssetLoader.Utility; using System.Collections.Generic; -using UnityEngine; using YooAsset; using static OxGFrame.AssetLoader.Utility.DownloadSpeedCalculator; using static YooAsset.DownloaderOperation; @@ -100,6 +99,15 @@ public static bool IsInitialized() return PackageManager.isInitialized; } + /// + /// Return yooasset is released + /// + /// + public static bool IsReleased() + { + return PackageManager.isReleased; + } + /// /// Return patch check state /// @@ -844,5 +852,14 @@ public static async UniTask BeginDownloadWithCombineDownloaders(ResourceDo #endregion #endregion #endregion + + /// + /// Release packages + /// + public static void Release() + { + BundleConfig.ReleaseSecureString(); + PackageManager.Release(); + } } } \ No newline at end of file diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/PackageManager.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/PackageManager.cs index db011f63..e1886b01 100644 --- a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/PackageManager.cs +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/PackageManager.cs @@ -11,6 +11,7 @@ namespace OxGFrame.AssetLoader.Bundle internal static class PackageManager { internal static bool isInitialized = false; + internal static bool isReleased = false; private static string _currentPackageName; private static ResourcePackage _currentPackage; @@ -761,6 +762,7 @@ public static ResourceDownloaderOperation GetPackageDownloaderByAssetInfos(Resou /// public static void Release() { + isReleased = true; YooAssets.Destroy(); } } diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/PatchLauncher.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/PatchLauncher.cs index 4992a1ee..b5387e9e 100644 --- a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/PatchLauncher.cs +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Bundle/PatchLauncher.cs @@ -100,16 +100,6 @@ private async void Awake() } } - private void OnApplicationQuit() - { - PackageManager.isInitialized = false; - BundleConfig.ReleaseSecureString(); -#if !UNITY_WEBGL - PackageManager.Release(); - Logging.Print("(Powered by YooAsset) Release Packages Completes."); -#endif - } - #if UNITY_EDITOR private void OnValidate() { diff --git a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs index 6fdff762..c44c06e7 100644 --- a/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs +++ b/Assets/OxGFrame/AssetLoader/Scripts/Runtime/Cacher/CacheBundle.cs @@ -869,6 +869,36 @@ public void UnloadScene(string assetName, bool recursively) } else Logging.Print($"Unload Scene Invalid】 => << CacheBundle >> sceneName: {assetName} maybe not Additive or is Single"); } + + public void ReleaseScenes() + { + if (this._additiveSceneCounter.Count == 0) return; + + HashSet packages = new HashSet(); + + // 強制釋放緩存與資源 + foreach (var assetName in this._additiveSceneCounter.Keys.ToArray()) + { + if (this.HasInCache(assetName)) + { + BundlePack pack = this.GetFromCache(assetName); + var package = PackageManager.GetPackage(pack.packageName); + if (!packages.Contains(package)) packages.Add(package); + this.UnloadScene(assetName, true); + } + } + + // 清除 Additive 計數緩存 + this._additiveScenes.Clear(); + this._additiveSceneCounter.Clear(); + + foreach (var package in packages) + { + package?.UnloadUnusedAssets(); + } + + Logging.Print($"【Release All Scenes (Addtive)】 => Current << CacheBundle >> Additive Scene Cache Count: {this._additiveSceneCounter.Count}"); + } #endregion #region Asset diff --git a/Assets/OxGFrame/CHANGELOG.md b/Assets/OxGFrame/CHANGELOG.md index 3a4ea5ab..7a620daa 100644 --- a/Assets/OxGFrame/CHANGELOG.md +++ b/Assets/OxGFrame/CHANGELOG.md @@ -1,5 +1,10 @@ # CHANGELOG +## [2.11.6] - 2024-07-29 +- Added method AssetsLoaders.ReleaseBundleScenes (for additive scenes). +- Added method AssetPatcher.Release (mainly for yooasset destroy). +- Removed OnApplicationQuit process in PatchLauncher, use manual to call AssetPatcher.Release before the application quits. + ## [2.11.5] - 2024-07-22 - Fixed Unload after yooasset destroyed bug issue. - Fixed same package in PackageFsmStates diff --git a/Assets/OxGFrame/package.json b/Assets/OxGFrame/package.json index 7700b279..0b489d20 100644 --- a/Assets/OxGFrame/package.json +++ b/Assets/OxGFrame/package.json @@ -2,7 +2,7 @@ "name": "com.michaelo.oxgframe", "displayName": "OxGFrame", "description": "The OxGFrame is a framework based on Unity for accelerating game development. Supports multi-platform Win, OSX, Android, iOS, WebGL.", - "version": "2.11.5", + "version": "2.11.6", "unity": "2021.3", "license": "MIT", "samples": [