mirror of
https://github.com/tuyoogame/YooAsset.git
synced 2026-05-31 05:58:47 +00:00
@@ -62,6 +62,11 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount)
|
public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount)
|
||||||
{
|
{
|
||||||
|
if (assetInfo == null)
|
||||||
|
{
|
||||||
|
YooLogger.Error($"{nameof(AssetInfo)} is null !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (assetInfo.IsInvalid)
|
if (assetInfo.IsInvalid)
|
||||||
{
|
{
|
||||||
YooLogger.Error($"Failed to unload asset ! {assetInfo.Error}");
|
YooLogger.Error($"Failed to unload asset ! {assetInfo.Error}");
|
||||||
@@ -73,31 +78,29 @@ namespace YooAsset
|
|||||||
loopCount--;
|
loopCount--;
|
||||||
|
|
||||||
// 卸载主资源包加载器
|
// 卸载主资源包加载器
|
||||||
string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo);
|
string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo.Asset.BundleID);
|
||||||
var mainLoader = TryGetBundleFileLoader(mainBundleName);
|
var mainLoader = TryGetBundleFileLoader(mainBundleName);
|
||||||
if (mainLoader != null)
|
if (mainLoader != null)
|
||||||
{
|
{
|
||||||
mainLoader.TryDestroyProviders();
|
mainLoader.TryDestroyProviders();
|
||||||
if (mainLoader.CanDestroyLoader())
|
if (mainLoader.CanDestroyLoader())
|
||||||
{
|
{
|
||||||
string bundleName = mainLoader.LoadBundleInfo.Bundle.BundleName;
|
|
||||||
mainLoader.DestroyLoader();
|
mainLoader.DestroyLoader();
|
||||||
LoaderDic.Remove(bundleName);
|
LoaderDic.Remove(mainBundleName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 卸载依赖资源包加载器
|
// 卸载依赖资源包加载器
|
||||||
string[] dependBundleNames = _bundleQuery.GetDependBundleNames(assetInfo);
|
foreach (var dependID in assetInfo.Asset.DependBundleIDs)
|
||||||
foreach (var dependBundleName in dependBundleNames)
|
|
||||||
{
|
{
|
||||||
|
string dependBundleName = _bundleQuery.GetMainBundleName(dependID);
|
||||||
var dependLoader = TryGetBundleFileLoader(dependBundleName);
|
var dependLoader = TryGetBundleFileLoader(dependBundleName);
|
||||||
if (dependLoader != null)
|
if (dependLoader != null)
|
||||||
{
|
{
|
||||||
if (dependLoader.CanDestroyLoader())
|
if (dependLoader.CanDestroyLoader())
|
||||||
{
|
{
|
||||||
string bundleName = dependLoader.LoadBundleInfo.Bundle.BundleName;
|
|
||||||
dependLoader.DestroyLoader();
|
dependLoader.DestroyLoader();
|
||||||
LoaderDic.Remove(bundleName);
|
LoaderDic.Remove(dependBundleName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -296,8 +299,8 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
internal List<LoadBundleFileOperation> CreateDependBundleFileLoaders(AssetInfo assetInfo)
|
internal List<LoadBundleFileOperation> CreateDependBundleFileLoaders(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
BundleInfo[] bundleInfos = _bundleQuery.GetDependBundleInfos(assetInfo);
|
List<BundleInfo> bundleInfos = _bundleQuery.GetDependBundleInfos(assetInfo);
|
||||||
List<LoadBundleFileOperation> result = new List<LoadBundleFileOperation>(bundleInfos.Length);
|
List<LoadBundleFileOperation> result = new List<LoadBundleFileOperation>(bundleInfos.Count);
|
||||||
foreach (var bundleInfo in bundleInfos)
|
foreach (var bundleInfo in bundleInfos)
|
||||||
{
|
{
|
||||||
var bundleLoader = CreateBundleFileLoaderInternal(bundleInfo);
|
var bundleLoader = CreateBundleFileLoaderInternal(bundleInfo);
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace YooAsset
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
internal interface IBundleQuery
|
internal interface IBundleQuery
|
||||||
@@ -11,21 +13,11 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取依赖的资源包信息集合
|
/// 获取依赖的资源包信息集合
|
||||||
/// </summary>
|
/// </summary>
|
||||||
BundleInfo[] GetDependBundleInfos(AssetInfo assetPath);
|
List<BundleInfo> GetDependBundleInfos(AssetInfo assetPath);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取主资源包名称
|
/// 获取主资源包名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
string GetMainBundleName(int bundleID);
|
string GetMainBundleName(int bundleID);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取主资源包名称
|
|
||||||
/// </summary>
|
|
||||||
string GetMainBundleName(AssetInfo assetInfo);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取依赖的资源包名称集合
|
|
||||||
/// </summary>
|
|
||||||
string[] GetDependBundleNames(AssetInfo assetInfo);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -171,10 +170,10 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取依赖列表
|
/// 获取资源对象的依赖列表(框架层查询结果)
|
||||||
/// 注意:传入的资源对象一定合法有效!
|
/// 注意:传入的资源对象一定合法有效!
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public PackageBundle[] GetAllDependencies(PackageAsset packageAsset)
|
public List<PackageBundle> GetAssetAllDependencies(PackageAsset packageAsset)
|
||||||
{
|
{
|
||||||
List<PackageBundle> result = new List<PackageBundle>(packageAsset.DependBundleIDs.Length);
|
List<PackageBundle> result = new List<PackageBundle>(packageAsset.DependBundleIDs.Length);
|
||||||
foreach (var dependID in packageAsset.DependBundleIDs)
|
foreach (var dependID in packageAsset.DependBundleIDs)
|
||||||
@@ -182,14 +181,14 @@ namespace YooAsset
|
|||||||
var dependBundle = GetMainPackageBundle(dependID);
|
var dependBundle = GetMainPackageBundle(dependID);
|
||||||
result.Add(dependBundle);
|
result.Add(dependBundle);
|
||||||
}
|
}
|
||||||
return result.ToArray();
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取依赖列表
|
/// 获取资源包的依赖列表(引擎层查询结果)
|
||||||
/// 注意:传入的资源包对象一定合法有效!
|
/// 注意:传入的资源包对象一定合法有效!
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public PackageBundle[] GetAllDependencies(PackageBundle packageBundle)
|
public List<PackageBundle> GetBundleAllDependencies(PackageBundle packageBundle)
|
||||||
{
|
{
|
||||||
List<PackageBundle> result = new List<PackageBundle>(packageBundle.DependBundleIDs.Length);
|
List<PackageBundle> result = new List<PackageBundle>(packageBundle.DependBundleIDs.Length);
|
||||||
foreach (var dependID in packageBundle.DependBundleIDs)
|
foreach (var dependID in packageBundle.DependBundleIDs)
|
||||||
@@ -197,7 +196,7 @@ namespace YooAsset
|
|||||||
var dependBundle = GetMainPackageBundle(dependID);
|
var dependBundle = GetMainPackageBundle(dependID);
|
||||||
result.Add(dependBundle);
|
result.Add(dependBundle);
|
||||||
}
|
}
|
||||||
return result.ToArray();
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -211,17 +210,17 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 尝试获取包裹的资源包
|
/// 尝试获取包裹的资源包
|
||||||
/// </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>
|
||||||
/// 尝试获取包裹的资源包
|
/// 尝试获取包裹的资源包
|
||||||
/// </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>
|
/// <summary>
|
||||||
@@ -245,13 +244,14 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public AssetInfo[] GetAllAssetInfos()
|
public AssetInfo[] GetAllAssetInfos()
|
||||||
{
|
{
|
||||||
List<AssetInfo> result = new List<AssetInfo>(AssetList.Count);
|
AssetInfo[] result = new AssetInfo[AssetList.Count];
|
||||||
foreach (var packageAsset in AssetList)
|
for (int i = 0; i < AssetList.Count; i++)
|
||||||
{
|
{
|
||||||
|
var packageAsset = AssetList[i];
|
||||||
AssetInfo assetInfo = new AssetInfo(PackageName, packageAsset, null);
|
AssetInfo assetInfo = new AssetInfo(PackageName, packageAsset, null);
|
||||||
result.Add(assetInfo);
|
result[i] = assetInfo;
|
||||||
}
|
}
|
||||||
return result.ToArray();
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -259,7 +259,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public AssetInfo[] GetAssetInfosByTags(string[] tags)
|
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)
|
foreach (var packageAsset in AssetList)
|
||||||
{
|
{
|
||||||
if (packageAsset.HasTag(tags))
|
if (packageAsset.HasTag(tags))
|
||||||
|
|||||||
@@ -176,30 +176,30 @@ namespace YooAsset
|
|||||||
var packageBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset);
|
var packageBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset);
|
||||||
return CreateBundleInfo(packageBundle);
|
return CreateBundleInfo(packageBundle);
|
||||||
}
|
}
|
||||||
BundleInfo[] IBundleQuery.GetDependBundleInfos(AssetInfo assetInfo)
|
List<BundleInfo> IBundleQuery.GetDependBundleInfos(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
if (assetInfo == null || assetInfo.IsInvalid)
|
if (assetInfo == null || assetInfo.IsInvalid)
|
||||||
throw new Exception("Should never get here !");
|
throw new Exception("Should never get here !");
|
||||||
|
|
||||||
// 注意:如果清单里未找到资源包会抛出异常!
|
// 注意:如果清单里未找到资源包会抛出异常!
|
||||||
PackageBundle[] depends;
|
List<PackageBundle> depends;
|
||||||
if (assetInfo.LoadMethod == AssetInfo.ELoadMethod.LoadAllAssets)
|
if (assetInfo.LoadMethod == AssetInfo.ELoadMethod.LoadAllAssets)
|
||||||
{
|
{
|
||||||
var mainBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset);
|
var mainBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset);
|
||||||
depends = ActiveManifest.GetAllDependencies(mainBundle);
|
depends = ActiveManifest.GetBundleAllDependencies(mainBundle);
|
||||||
}
|
}
|
||||||
else
|
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)
|
foreach (var packageBundle in depends)
|
||||||
{
|
{
|
||||||
BundleInfo bundleInfo = CreateBundleInfo(packageBundle);
|
BundleInfo bundleInfo = CreateBundleInfo(packageBundle);
|
||||||
result.Add(bundleInfo);
|
result.Add(bundleInfo);
|
||||||
}
|
}
|
||||||
return result.ToArray();
|
return result;
|
||||||
}
|
}
|
||||||
string IBundleQuery.GetMainBundleName(int bundleID)
|
string IBundleQuery.GetMainBundleName(int bundleID)
|
||||||
{
|
{
|
||||||
@@ -207,29 +207,6 @@ namespace YooAsset
|
|||||||
var packageBundle = ActiveManifest.GetMainPackageBundle(bundleID);
|
var packageBundle = ActiveManifest.GetMainPackageBundle(bundleID);
|
||||||
return packageBundle.BundleName;
|
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
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -336,7 +313,7 @@ namespace YooAsset
|
|||||||
checkList.Add(mainBundle);
|
checkList.Add(mainBundle);
|
||||||
|
|
||||||
// 注意:如果清单里未找到资源包会抛出异常!
|
// 注意:如果清单里未找到资源包会抛出异常!
|
||||||
PackageBundle[] mainDependBundles = manifest.GetAllDependencies(assetInfo.Asset);
|
List<PackageBundle> mainDependBundles = manifest.GetAssetAllDependencies(assetInfo.Asset);
|
||||||
foreach (var dependBundle in mainDependBundles)
|
foreach (var dependBundle in mainDependBundles)
|
||||||
{
|
{
|
||||||
if (checkList.Contains(dependBundle) == false)
|
if (checkList.Contains(dependBundle) == false)
|
||||||
@@ -352,7 +329,7 @@ namespace YooAsset
|
|||||||
if (checkList.Contains(otherMainBundle) == false)
|
if (checkList.Contains(otherMainBundle) == false)
|
||||||
checkList.Add(otherMainBundle);
|
checkList.Add(otherMainBundle);
|
||||||
|
|
||||||
PackageBundle[] otherDependBundles = manifest.GetAllDependencies(otherMainAsset);
|
List<PackageBundle> otherDependBundles = manifest.GetAssetAllDependencies(otherMainAsset);
|
||||||
foreach (var dependBundle in otherDependBundles)
|
foreach (var dependBundle in otherDependBundles)
|
||||||
{
|
{
|
||||||
if (checkList.Contains(dependBundle) == false)
|
if (checkList.Contains(dependBundle) == false)
|
||||||
|
|||||||
@@ -496,7 +496,7 @@ namespace YooAsset
|
|||||||
if (bundleInfo.IsNeedDownloadFromRemote())
|
if (bundleInfo.IsNeedDownloadFromRemote())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
BundleInfo[] depends = _bundleQuery.GetDependBundleInfos(assetInfo);
|
List<BundleInfo> depends = _bundleQuery.GetDependBundleInfos(assetInfo);
|
||||||
foreach (var depend in depends)
|
foreach (var depend in depends)
|
||||||
{
|
{
|
||||||
if (depend.IsNeedDownloadFromRemote())
|
if (depend.IsNeedDownloadFromRemote())
|
||||||
@@ -555,6 +555,7 @@ namespace YooAsset
|
|||||||
|
|
||||||
private RawFileHandle LoadRawFileInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority)
|
private RawFileHandle LoadRawFileInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority)
|
||||||
{
|
{
|
||||||
|
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadRawFile;
|
||||||
var handle = _resourceManager.LoadRawFileAsync(assetInfo, priority);
|
var handle = _resourceManager.LoadRawFileAsync(assetInfo, priority);
|
||||||
if (waitForAsyncComplete)
|
if (waitForAsyncComplete)
|
||||||
handle.WaitForAsyncComplete();
|
handle.WaitForAsyncComplete();
|
||||||
|
|||||||
Reference in New Issue
Block a user