diff --git a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs index 5d8c2666..a885d046 100644 --- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs +++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs @@ -62,6 +62,11 @@ namespace YooAsset /// public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount) { + if (assetInfo == null) + { + YooLogger.Error($"{nameof(AssetInfo)} is null !"); + return; + } if (assetInfo.IsInvalid) { YooLogger.Error($"Failed to unload asset ! {assetInfo.Error}"); @@ -73,31 +78,29 @@ namespace YooAsset loopCount--; // 卸载主资源包加载器 - string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo); + string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo.Asset.BundleID); var mainLoader = TryGetBundleFileLoader(mainBundleName); if (mainLoader != null) { mainLoader.TryDestroyProviders(); if (mainLoader.CanDestroyLoader()) { - string bundleName = mainLoader.LoadBundleInfo.Bundle.BundleName; mainLoader.DestroyLoader(); - LoaderDic.Remove(bundleName); + LoaderDic.Remove(mainBundleName); } } // 卸载依赖资源包加载器 - string[] dependBundleNames = _bundleQuery.GetDependBundleNames(assetInfo); - foreach (var dependBundleName in dependBundleNames) + foreach (var dependID in assetInfo.Asset.DependBundleIDs) { + string dependBundleName = _bundleQuery.GetMainBundleName(dependID); var dependLoader = TryGetBundleFileLoader(dependBundleName); if (dependLoader != null) { if (dependLoader.CanDestroyLoader()) { - string bundleName = dependLoader.LoadBundleInfo.Bundle.BundleName; dependLoader.DestroyLoader(); - LoaderDic.Remove(bundleName); + LoaderDic.Remove(dependBundleName); } } } @@ -296,8 +299,8 @@ namespace YooAsset } internal List CreateDependBundleFileLoaders(AssetInfo assetInfo) { - BundleInfo[] bundleInfos = _bundleQuery.GetDependBundleInfos(assetInfo); - List result = new List(bundleInfos.Length); + List bundleInfos = _bundleQuery.GetDependBundleInfos(assetInfo); + List result = new List(bundleInfos.Count); foreach (var bundleInfo in bundleInfos) { var bundleLoader = CreateBundleFileLoaderInternal(bundleInfo); diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Interface/IBundleQuery.cs b/Assets/YooAsset/Runtime/ResourcePackage/Interface/IBundleQuery.cs index 1261d7ae..2906c7f0 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Interface/IBundleQuery.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Interface/IBundleQuery.cs @@ -1,4 +1,6 @@ - +using System.Collections; +using System.Collections.Generic; + namespace YooAsset { internal interface IBundleQuery @@ -11,21 +13,11 @@ namespace YooAsset /// /// 获取依赖的资源包信息集合 /// - BundleInfo[] GetDependBundleInfos(AssetInfo assetPath); + List GetDependBundleInfos(AssetInfo assetPath); /// /// 获取主资源包名称 /// string GetMainBundleName(int bundleID); - - /// - /// 获取主资源包名称 - /// - string GetMainBundleName(AssetInfo assetInfo); - - /// - /// 获取依赖的资源包名称集合 - /// - string[] GetDependBundleNames(AssetInfo assetInfo); } } \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs index 8942a865..3975c83c 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using System.Diagnostics; using System.Collections; using System.Collections.Generic; @@ -171,10 +170,10 @@ namespace YooAsset } /// - /// 获取依赖列表 + /// 获取资源对象的依赖列表(框架层查询结果) /// 注意:传入的资源对象一定合法有效! /// - public PackageBundle[] GetAllDependencies(PackageAsset packageAsset) + public List GetAssetAllDependencies(PackageAsset packageAsset) { List result = new List(packageAsset.DependBundleIDs.Length); foreach (var dependID in packageAsset.DependBundleIDs) @@ -182,14 +181,14 @@ namespace YooAsset var dependBundle = GetMainPackageBundle(dependID); result.Add(dependBundle); } - return result.ToArray(); + return result; } /// - /// 获取依赖列表 + /// 获取资源包的依赖列表(引擎层查询结果) /// 注意:传入的资源包对象一定合法有效! /// - public PackageBundle[] GetAllDependencies(PackageBundle packageBundle) + public List GetBundleAllDependencies(PackageBundle packageBundle) { List result = new List(packageBundle.DependBundleIDs.Length); foreach (var dependID in packageBundle.DependBundleIDs) @@ -197,7 +196,7 @@ namespace YooAsset var dependBundle = GetMainPackageBundle(dependID); result.Add(dependBundle); } - return result.ToArray(); + return result; } /// @@ -211,17 +210,17 @@ namespace YooAsset /// /// 尝试获取包裹的资源包 /// - public bool TryGetPackageBundleByBundleName(string bundleName, out PackageBundle result) + public bool TryGetPackageBundleByFileName(string fileName, out PackageBundle result) { - return BundleDic1.TryGetValue(bundleName, out result); + return BundleDic2.TryGetValue(fileName, out result); } /// /// 尝试获取包裹的资源包 /// - public bool TryGetPackageBundleByFileName(string fileName, out PackageBundle result) + public bool TryGetPackageBundleByBundleName(string bundleName, out PackageBundle result) { - return BundleDic2.TryGetValue(fileName, out result); + return BundleDic1.TryGetValue(bundleName, out result); } /// @@ -245,13 +244,14 @@ namespace YooAsset /// public AssetInfo[] GetAllAssetInfos() { - List result = new List(AssetList.Count); - foreach (var packageAsset in AssetList) + AssetInfo[] result = new AssetInfo[AssetList.Count]; + for (int i = 0; i < AssetList.Count; i++) { + var packageAsset = AssetList[i]; AssetInfo assetInfo = new AssetInfo(PackageName, packageAsset, null); - result.Add(assetInfo); + result[i] = assetInfo; } - return result.ToArray(); + return result; } /// @@ -259,7 +259,7 @@ namespace YooAsset /// public AssetInfo[] GetAssetInfosByTags(string[] tags) { - List result = new List(100); + List result = new List(AssetList.Count); foreach (var packageAsset in AssetList) { if (packageAsset.HasTag(tags)) diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs index a640e515..02eb43f7 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs @@ -176,30 +176,30 @@ namespace YooAsset var packageBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset); return CreateBundleInfo(packageBundle); } - BundleInfo[] IBundleQuery.GetDependBundleInfos(AssetInfo assetInfo) + List IBundleQuery.GetDependBundleInfos(AssetInfo assetInfo) { if (assetInfo == null || assetInfo.IsInvalid) throw new Exception("Should never get here !"); // 注意:如果清单里未找到资源包会抛出异常! - PackageBundle[] depends; + List depends; if (assetInfo.LoadMethod == AssetInfo.ELoadMethod.LoadAllAssets) { var mainBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset); - depends = ActiveManifest.GetAllDependencies(mainBundle); + depends = ActiveManifest.GetBundleAllDependencies(mainBundle); } else { - depends = ActiveManifest.GetAllDependencies(assetInfo.Asset); + depends = ActiveManifest.GetAssetAllDependencies(assetInfo.Asset); } - List result = new List(depends.Length); + List result = new List(depends.Count); foreach (var packageBundle in depends) { BundleInfo bundleInfo = CreateBundleInfo(packageBundle); result.Add(bundleInfo); } - return result.ToArray(); + return result; } string IBundleQuery.GetMainBundleName(int bundleID) { @@ -207,29 +207,6 @@ namespace YooAsset var packageBundle = ActiveManifest.GetMainPackageBundle(bundleID); return packageBundle.BundleName; } - string IBundleQuery.GetMainBundleName(AssetInfo assetInfo) - { - if (assetInfo == null || assetInfo.IsInvalid) - throw new Exception("Should never get here !"); - - // 注意:如果清单里未找到资源包会抛出异常! - var packageBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset); - return packageBundle.BundleName; - } - string[] IBundleQuery.GetDependBundleNames(AssetInfo assetInfo) - { - if (assetInfo == null || assetInfo.IsInvalid) - throw new Exception("Should never get here !"); - - // 注意:如果清单里未找到资源包会抛出异常! - var depends = ActiveManifest.GetAllDependencies(assetInfo.Asset); - List result = new List(depends.Length); - foreach (var packageBundle in depends) - { - result.Add(packageBundle.BundleName); - } - return result.ToArray(); - } #endregion /// @@ -336,7 +313,7 @@ namespace YooAsset checkList.Add(mainBundle); // 注意:如果清单里未找到资源包会抛出异常! - PackageBundle[] mainDependBundles = manifest.GetAllDependencies(assetInfo.Asset); + List mainDependBundles = manifest.GetAssetAllDependencies(assetInfo.Asset); foreach (var dependBundle in mainDependBundles) { if (checkList.Contains(dependBundle) == false) @@ -352,7 +329,7 @@ namespace YooAsset if (checkList.Contains(otherMainBundle) == false) checkList.Add(otherMainBundle); - PackageBundle[] otherDependBundles = manifest.GetAllDependencies(otherMainAsset); + List otherDependBundles = manifest.GetAssetAllDependencies(otherMainAsset); foreach (var dependBundle in otherDependBundles) { if (checkList.Contains(dependBundle) == false) diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs index 7f5663f9..16983a02 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs @@ -496,7 +496,7 @@ namespace YooAsset if (bundleInfo.IsNeedDownloadFromRemote()) return true; - BundleInfo[] depends = _bundleQuery.GetDependBundleInfos(assetInfo); + List depends = _bundleQuery.GetDependBundleInfos(assetInfo); foreach (var depend in depends) { if (depend.IsNeedDownloadFromRemote()) @@ -555,6 +555,7 @@ namespace YooAsset private RawFileHandle LoadRawFileInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority) { + assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadRawFile; var handle = _resourceManager.LoadRawFileAsync(assetInfo, priority); if (waitForAsyncComplete) handle.WaitForAsyncComplete();