mirror of
https://github.com/tuyoogame/YooAsset.git
synced 2026-05-22 00:11:41 +00:00
@@ -62,6 +62,11 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
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<LoadBundleFileOperation> CreateDependBundleFileLoaders(AssetInfo assetInfo)
|
||||
{
|
||||
BundleInfo[] bundleInfos = _bundleQuery.GetDependBundleInfos(assetInfo);
|
||||
List<LoadBundleFileOperation> result = new List<LoadBundleFileOperation>(bundleInfos.Length);
|
||||
List<BundleInfo> bundleInfos = _bundleQuery.GetDependBundleInfos(assetInfo);
|
||||
List<LoadBundleFileOperation> result = new List<LoadBundleFileOperation>(bundleInfos.Count);
|
||||
foreach (var bundleInfo in bundleInfos)
|
||||
{
|
||||
var bundleLoader = CreateBundleFileLoaderInternal(bundleInfo);
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace YooAsset
|
||||
{
|
||||
internal interface IBundleQuery
|
||||
@@ -11,21 +13,11 @@ namespace YooAsset
|
||||
/// <summary>
|
||||
/// 获取依赖的资源包信息集合
|
||||
/// </summary>
|
||||
BundleInfo[] GetDependBundleInfos(AssetInfo assetPath);
|
||||
List<BundleInfo> GetDependBundleInfos(AssetInfo assetPath);
|
||||
|
||||
/// <summary>
|
||||
/// 获取主资源包名称
|
||||
/// </summary>
|
||||
string GetMainBundleName(int bundleID);
|
||||
|
||||
/// <summary>
|
||||
/// 获取主资源包名称
|
||||
/// </summary>
|
||||
string GetMainBundleName(AssetInfo assetInfo);
|
||||
|
||||
/// <summary>
|
||||
/// 获取依赖的资源包名称集合
|
||||
/// </summary>
|
||||
string[] GetDependBundleNames(AssetInfo assetInfo);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取依赖列表
|
||||
/// 获取资源对象的依赖列表(框架层查询结果)
|
||||
/// 注意:传入的资源对象一定合法有效!
|
||||
/// </summary>
|
||||
public PackageBundle[] GetAllDependencies(PackageAsset packageAsset)
|
||||
public List<PackageBundle> GetAssetAllDependencies(PackageAsset packageAsset)
|
||||
{
|
||||
List<PackageBundle> result = new List<PackageBundle>(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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取依赖列表
|
||||
/// 获取资源包的依赖列表(引擎层查询结果)
|
||||
/// 注意:传入的资源包对象一定合法有效!
|
||||
/// </summary>
|
||||
public PackageBundle[] GetAllDependencies(PackageBundle packageBundle)
|
||||
public List<PackageBundle> GetBundleAllDependencies(PackageBundle packageBundle)
|
||||
{
|
||||
List<PackageBundle> result = new List<PackageBundle>(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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -211,17 +210,17 @@ namespace YooAsset
|
||||
/// <summary>
|
||||
/// 尝试获取包裹的资源包
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 尝试获取包裹的资源包
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -245,13 +244,14 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
public AssetInfo[] GetAllAssetInfos()
|
||||
{
|
||||
List<AssetInfo> result = new List<AssetInfo>(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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -259,7 +259,7 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
public AssetInfo[] GetAssetInfosByTags(string[] tags)
|
||||
{
|
||||
List<AssetInfo> result = new List<AssetInfo>(100);
|
||||
List<AssetInfo> result = new List<AssetInfo>(AssetList.Count);
|
||||
foreach (var packageAsset in AssetList)
|
||||
{
|
||||
if (packageAsset.HasTag(tags))
|
||||
|
||||
@@ -176,30 +176,30 @@ namespace YooAsset
|
||||
var packageBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset);
|
||||
return CreateBundleInfo(packageBundle);
|
||||
}
|
||||
BundleInfo[] IBundleQuery.GetDependBundleInfos(AssetInfo assetInfo)
|
||||
List<BundleInfo> IBundleQuery.GetDependBundleInfos(AssetInfo assetInfo)
|
||||
{
|
||||
if (assetInfo == null || assetInfo.IsInvalid)
|
||||
throw new Exception("Should never get here !");
|
||||
|
||||
// 注意:如果清单里未找到资源包会抛出异常!
|
||||
PackageBundle[] depends;
|
||||
List<PackageBundle> 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<BundleInfo> result = new List<BundleInfo>(depends.Length);
|
||||
List<BundleInfo> result = new List<BundleInfo>(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<string> result = new List<string>(depends.Length);
|
||||
foreach (var packageBundle in depends)
|
||||
{
|
||||
result.Add(packageBundle.BundleName);
|
||||
}
|
||||
return result.ToArray();
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
@@ -336,7 +313,7 @@ namespace YooAsset
|
||||
checkList.Add(mainBundle);
|
||||
|
||||
// 注意:如果清单里未找到资源包会抛出异常!
|
||||
PackageBundle[] mainDependBundles = manifest.GetAllDependencies(assetInfo.Asset);
|
||||
List<PackageBundle> 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<PackageBundle> otherDependBundles = manifest.GetAssetAllDependencies(otherMainAsset);
|
||||
foreach (var dependBundle in otherDependBundles)
|
||||
{
|
||||
if (checkList.Contains(dependBundle) == false)
|
||||
|
||||
@@ -496,7 +496,7 @@ namespace YooAsset
|
||||
if (bundleInfo.IsNeedDownloadFromRemote())
|
||||
return true;
|
||||
|
||||
BundleInfo[] depends = _bundleQuery.GetDependBundleInfos(assetInfo);
|
||||
List<BundleInfo> 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();
|
||||
|
||||
Reference in New Issue
Block a user