diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
index e701dabe..28a53a26 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
@@ -51,6 +51,11 @@ namespace YooAsset.Editor
///
public string PackageNote;
+ ///
+ /// 旧版依赖模式
+ ///
+ public bool LegacyDependency = false;
+
///
/// 清空构建缓存文件
///
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
index b6979fbe..da1ee066 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
@@ -31,6 +31,7 @@ namespace YooAsset.Editor
// 创建新补丁清单
PackageManifest manifest = new PackageManifest();
manifest.FileVersion = YooAssetSettings.ManifestFileVersion;
+ manifest.LegacyDependency = buildParameters.LegacyDependency;
manifest.EnableAddressable = buildMapContext.Command.EnableAddressable;
manifest.LocationToLower = buildMapContext.Command.LocationToLower;
manifest.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID;
@@ -43,8 +44,8 @@ namespace YooAsset.Editor
manifest.AssetList = CreatePackageAssetList(buildMapContext);
manifest.BundleList = CreatePackageBundleList(buildMapContext);
- // 处理资源清单的ID数据
- ProcessPacakgeIDs(manifest);
+ // 处理资源清单的资源对象
+ ProcessPacakgeAsset(manifest);
// 处理资源包的依赖列表
if (processBundleDepends)
@@ -54,6 +55,14 @@ namespace YooAsset.Editor
if (processBundleTags)
ProcessBundleTags(manifest);
+ #region YOOASSET_LEGACY_DEPENDENCY
+ if (buildParameters.LegacyDependency)
+ {
+ if (processBundleDepends)
+ ProcessLegacyDependency(context, manifest);
+ }
+ #endregion
+
// 创建补丁清单文本文件
{
string fileName = YooAssetSettingsData.GetManifestJsonFileName(buildParameters.PackageName, buildParameters.PackageVersion);
@@ -137,7 +146,7 @@ namespace YooAsset.Editor
packageAsset.AssetPath = assetInfo.AssetInfo.AssetPath;
packageAsset.AssetGUID = buildMapContext.Command.IncludeAssetGUID ? assetInfo.AssetInfo.AssetGUID : string.Empty;
packageAsset.AssetTags = assetInfo.AssetTags.ToArray();
- packageAsset.BundleNameInEditor = assetInfo.BundleName;
+ packageAsset.TempDataInEditor = assetInfo;
result.Add(packageAsset);
}
}
@@ -165,9 +174,9 @@ namespace YooAsset.Editor
}
///
- /// 处理资源清单的ID数据
+ /// 处理资源清单的资源对象列表
///
- private void ProcessPacakgeIDs(PackageManifest manifest)
+ private void ProcessPacakgeAsset(PackageManifest manifest)
{
// 注意:优先缓存资源包索引
for (int index = 0; index < manifest.BundleList.Count; index++)
@@ -176,10 +185,11 @@ namespace YooAsset.Editor
_cachedBundleIndexIDs.Add(bundleName, index);
}
+ // 记录资源对象所属的资源包ID
foreach (var packageAsset in manifest.AssetList)
{
- string bundleName = packageAsset.BundleNameInEditor;
- packageAsset.BundleID = GetCachedBundleIndexID(bundleName);
+ var assetInfo = packageAsset.TempDataInEditor as BuildAssetInfo;
+ packageAsset.BundleID = GetCachedBundleIndexID(assetInfo.BundleName);
}
}
@@ -192,7 +202,7 @@ namespace YooAsset.Editor
foreach (var packageBundle in manifest.BundleList)
{
int mainBundleID = GetCachedBundleIndexID(packageBundle.BundleName);
- var depends = GetBundleDepends(context, packageBundle.BundleName);
+ string[] depends = GetBundleDepends(context, packageBundle.BundleName);
List dependIDs = new List(depends.Length);
foreach (var dependBundleName in depends)
{
@@ -264,5 +274,140 @@ namespace YooAsset.Editor
}
return value;
}
+
+ ///
+ /// 是否包含该资源包的索引ID
+ ///
+ private bool ContainsCachedBundleIndexID(string bundleName)
+ {
+ return _cachedBundleIndexIDs.ContainsKey(bundleName);
+ }
+
+ #region YOOASSET_LEGACY_DEPENDENCY
+ private class DependencyQuery
+ {
+ private readonly HashSet _dependIDs;
+
+ public DependencyQuery(int[] dependIDs)
+ {
+ _dependIDs = new HashSet(dependIDs);
+ }
+ public bool Contains(int bundleID)
+ {
+ return _dependIDs.Contains(bundleID);
+ }
+ }
+ private void ProcessLegacyDependency(BuildContext context, PackageManifest manifest)
+ {
+ foreach (var packageBundle in manifest.BundleList)
+ {
+ var dependIDs = packageBundle.DependIDs;
+ packageBundle.TempDataInEditor = new DependencyQuery(dependIDs);
+ }
+
+ // 记录资源对象依赖的资源包ID集合
+ // 注意:依赖关系非引擎构建结果里查询!
+ foreach (var packageAsset in manifest.AssetList)
+ {
+ var mainAssetInfo = packageAsset.TempDataInEditor as BuildAssetInfo;
+ packageAsset.DependBundleIDs = GetAssetDependBundleIDs(mainAssetInfo);
+ }
+
+ // 记录引用该资源包的资源包ID集合
+ foreach (var packageBundle in manifest.BundleList)
+ {
+ packageBundle.ReferenceBundleIDs = GetBundleReferenceBundleIDs(manifest, packageBundle);
+ }
+
+ // 注意:如果是可编程构建管线,需要补充内置资源包
+ // 注意:该步骤依赖前面的操作!
+ var buildResultContext = context.TryGetContextObject();
+ if (buildResultContext != null)
+ {
+ ProcessBuiltinBundleReference(context, manifest, buildResultContext.BuiltinShadersBundleName);
+ ProcessBuiltinBundleReference(context, manifest, buildResultContext.MonoScriptsBundleName);
+ }
+ }
+ private void ProcessBuiltinBundleReference(BuildContext context, PackageManifest manifest, string builtinBundleName)
+ {
+ if (string.IsNullOrEmpty(builtinBundleName))
+ return;
+
+ // 查询内置资源包是否存在
+ if (ContainsCachedBundleIndexID(builtinBundleName) == false)
+ return;
+
+ // 获取内置资源包
+ int builtinBundleID = GetCachedBundleIndexID(builtinBundleName);
+ var builtinPackageBundle = manifest.BundleList[builtinBundleID];
+
+ // 更新依赖资源包ID集合
+ HashSet cacheBundleIDs = new HashSet(builtinPackageBundle.ReferenceBundleIDs);
+ HashSet tempTags = new HashSet();
+ foreach (var packageAsset in manifest.AssetList)
+ {
+ if (cacheBundleIDs.Contains(packageAsset.BundleID))
+ {
+ if (packageAsset.DependBundleIDs.Contains(builtinBundleID) == false)
+ {
+ var tempBundleIDs = new List(packageAsset.DependBundleIDs);
+ tempBundleIDs.Add(builtinBundleID);
+ packageAsset.DependBundleIDs = tempBundleIDs.ToArray();
+ }
+
+ foreach (var tag in packageAsset.AssetTags)
+ {
+ if (tempTags.Contains(tag) == false)
+ tempTags.Add(tag);
+ }
+ }
+ }
+
+ // 更新内置资源包的标签集合
+ foreach (var tag in builtinPackageBundle.Tags)
+ {
+ if (tempTags.Contains(tag) == false)
+ tempTags.Add(tag);
+ }
+ builtinPackageBundle.Tags = tempTags.ToArray();
+ }
+ private int[] GetAssetDependBundleIDs(BuildAssetInfo mainAssetInfo)
+ {
+ HashSet result = new HashSet();
+ int mainBundleID = GetCachedBundleIndexID(mainAssetInfo.BundleName);
+ foreach (var dependAssetInfo in mainAssetInfo.AllDependAssetInfos)
+ {
+ if (dependAssetInfo.HasBundleName())
+ {
+ int bundleID = GetCachedBundleIndexID(dependAssetInfo.BundleName);
+ if (mainBundleID != bundleID)
+ {
+ if (result.Contains(bundleID) == false)
+ result.Add(bundleID);
+ }
+ }
+ }
+ return result.ToArray();
+ }
+ private int[] GetBundleReferenceBundleIDs(PackageManifest manifest, PackageBundle queryBundle)
+ {
+ int queryBundleID = GetCachedBundleIndexID(queryBundle.BundleName);
+ List result = new List();
+ foreach (var packageBundle in manifest.BundleList)
+ {
+ if (packageBundle == queryBundle)
+ continue;
+
+ var dependencyQuery = packageBundle.TempDataInEditor as DependencyQuery;
+ if (dependencyQuery.Contains(queryBundleID))
+ {
+ int referenceBundleID = GetCachedBundleIndexID(packageBundle.BundleName);
+ if (result.Contains(referenceBundleID) == false)
+ result.Add(referenceBundleID);
+ }
+ }
+ return result.ToArray();
+ }
+ #endregion
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
index 17c5580a..a2aab138 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
@@ -42,6 +42,7 @@ namespace YooAsset.Editor
buildReport.Summary.AutoCollectShaders = buildMapContext.Command.AutoCollectShaders;
// 构建参数
+ buildReport.Summary.LegacyDependency = buildParameters.LegacyDependency;
buildReport.Summary.ClearBuildCacheFiles = buildParameters.ClearBuildCacheFiles;
buildReport.Summary.UseAssetDependencyDB = buildParameters.UseAssetDependencyDB;
buildReport.Summary.EnableSharePackRule = buildParameters.EnableSharePackRule;
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs
index fb716bcd..78ea9475 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs
@@ -13,6 +13,8 @@ namespace YooAsset.Editor
public class BuildResultContext : IContextObject
{
public IBundleBuildResults Results;
+ public string BuiltinShadersBundleName;
+ public string MonoScriptsBundleName;
}
void IBuildTask.Run(BuildContext context)
@@ -53,6 +55,8 @@ namespace YooAsset.Editor
BuildLogger.Log("UnityEngine build success!");
BuildResultContext buildResultContext = new BuildResultContext();
buildResultContext.Results = buildResults;
+ buildResultContext.BuiltinShadersBundleName = builtinShadersBundleName;
+ buildResultContext.MonoScriptsBundleName = monoScriptsBundleName;
context.SetContextObject(buildResultContext);
}
}
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/BuildContext.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/BuildContext.cs
index 668415a1..53603ff0 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/BuildContext.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/BuildContext.cs
@@ -9,7 +9,7 @@ namespace YooAsset.Editor
private readonly Dictionary _contextObjects = new Dictionary();
///
- /// 清空所有情景对象
+ /// 清空所有上下文对象
///
public void ClearAllContext()
{
@@ -17,7 +17,7 @@ namespace YooAsset.Editor
}
///
- /// 设置情景对象
+ /// 设置上下文对象
///
public void SetContextObject(IContextObject contextObject)
{
@@ -32,7 +32,7 @@ namespace YooAsset.Editor
}
///
- /// 获取情景对象
+ /// 获取上下文对象
///
public T GetContextObject() where T : IContextObject
{
@@ -46,5 +46,21 @@ namespace YooAsset.Editor
throw new Exception($"Not found context object : {type}");
}
}
+
+ ///
+ /// 获取上下文对象
+ ///
+ public T TryGetContextObject() where T : IContextObject
+ {
+ var type = typeof(T);
+ if (_contextObjects.TryGetValue(type, out IContextObject contextObject))
+ {
+ return (T)contextObject;
+ }
+ else
+ {
+ return default;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs b/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
index fc54f651..bf13b6fd 100644
--- a/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
+++ b/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
@@ -67,6 +67,7 @@ namespace YooAsset.Editor
public string IgnoreRuleName;
// 构建参数
+ public bool LegacyDependency;
public bool ClearBuildCacheFiles;
public bool UseAssetDependencyDB;
public bool EnableSharePackRule;
diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
index 168c5e6b..9c9ae7c0 100644
--- a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
@@ -75,9 +75,10 @@ namespace YooAsset.Editor
_items.Add(new ItemWrapper("Include Asset GUID", $"{buildReport.Summary.IncludeAssetGUID}"));
_items.Add(new ItemWrapper("Auto Collect Shaders", $"{buildReport.Summary.AutoCollectShaders}"));
_items.Add(new ItemWrapper("Ignore Rule Name", $"{buildReport.Summary.IgnoreRuleName}"));
-
+
_items.Add(new ItemWrapper(string.Empty, string.Empty));
_items.Add(new ItemWrapper("Build Params", string.Empty));
+ _items.Add(new ItemWrapper("Legacy Dependency Mode", $"{buildReport.Summary.LegacyDependency}"));
_items.Add(new ItemWrapper("Clear Build Cache Files", $"{buildReport.Summary.ClearBuildCacheFiles}"));
_items.Add(new ItemWrapper("Use Asset Dependency DB", $"{buildReport.Summary.UseAssetDependencyDB}"));
_items.Add(new ItemWrapper("Enable Share Pack Rule", $"{buildReport.Summary.EnableSharePackRule}"));
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operation/Internal/LoadBundleFileOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operation/Internal/LoadBundleFileOperation.cs
index 7d8ac92f..d52d7bd4 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operation/Internal/LoadBundleFileOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operation/Internal/LoadBundleFileOperation.cs
@@ -153,7 +153,23 @@ namespace YooAsset
if (IsDone == false)
return false;
- return RefCount <= 0;
+ if (RefCount > 0)
+ return false;
+
+ #region YOOASSET_LEGACY_DEPENDENCY
+ // 检查引用链上的资源包是否已经全部销毁
+ // 注意:互相引用的资源包无法卸载!
+ if (LoadBundleInfo.Bundle.ReferenceBundleIDs.Length > 0)
+ {
+ foreach (var bundleID in LoadBundleInfo.Bundle.ReferenceBundleIDs)
+ {
+ if (_resourceManager.CheckBundleDestroyed(bundleID) == false)
+ return false;
+ }
+ }
+ #endregion
+
+ return true;
}
///
diff --git a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
index 53bfa6e8..8535784a 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
@@ -298,6 +298,14 @@ namespace YooAsset
ProviderDic.Remove(provider.ProviderGUID);
}
}
+ internal bool CheckBundleDestroyed(int bundleID)
+ {
+ string bundleName = _bundleQuery.GetMainBundleName(bundleID);
+ var bundleFileLoader = TryGetBundleFileLoader(bundleName);
+ if (bundleFileLoader == null)
+ return true;
+ return bundleFileLoader.IsDestroyed;
+ }
internal bool HasAnyLoader()
{
return LoaderDic.Count > 0;
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Interface/IBundleQuery.cs b/Assets/YooAsset/Runtime/ResourcePackage/Interface/IBundleQuery.cs
index bac81f13..d0cb7013 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Interface/IBundleQuery.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Interface/IBundleQuery.cs
@@ -13,6 +13,11 @@ namespace YooAsset
///
BundleInfo[] GetDependBundleInfos(AssetInfo assetPath);
+ ///
+ /// 获取主资源包名称
+ ///
+ string GetMainBundleName(int bundleID);
+
///
/// 获取主资源包名称
///
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs b/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
index fec1db4c..62b24620 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
@@ -35,6 +35,7 @@ namespace YooAsset
buffer.WriteUTF8(manifest.FileVersion);
// 写入文件头信息
+ buffer.WriteBool(manifest.LegacyDependency);
buffer.WriteBool(manifest.EnableAddressable);
buffer.WriteBool(manifest.LocationToLower);
buffer.WriteBool(manifest.IncludeAssetGUID);
@@ -55,6 +56,7 @@ namespace YooAsset
buffer.WriteUTF8(packageAsset.AssetGUID);
buffer.WriteUTF8Array(packageAsset.AssetTags);
buffer.WriteInt32(packageAsset.BundleID);
+ buffer.WriteInt32Array(packageAsset.DependBundleIDs);
}
// 写入资源包列表
@@ -70,6 +72,7 @@ namespace YooAsset
buffer.WriteBool(packageBundle.Encrypted);
buffer.WriteUTF8Array(packageBundle.Tags);
buffer.WriteInt32Array(packageBundle.DependIDs);
+ buffer.WriteInt32Array(packageBundle.ReferenceBundleIDs);
}
// 写入文件流
@@ -108,6 +111,7 @@ namespace YooAsset
{
// 读取文件头信息
manifest.FileVersion = fileVersion;
+ manifest.LegacyDependency = buffer.ReadBool();
manifest.EnableAddressable = buffer.ReadBool();
manifest.LocationToLower = buffer.ReadBool();
manifest.IncludeAssetGUID = buffer.ReadBool();
@@ -133,6 +137,7 @@ namespace YooAsset
packageAsset.AssetGUID = buffer.ReadUTF8();
packageAsset.AssetTags = buffer.ReadUTF8Array();
packageAsset.BundleID = buffer.ReadInt32();
+ packageAsset.DependBundleIDs = buffer.ReadInt32Array();
FillAssetCollection(manifest, packageAsset);
}
@@ -150,6 +155,7 @@ namespace YooAsset
packageBundle.Encrypted = buffer.ReadBool();
packageBundle.Tags = buffer.ReadUTF8Array();
packageBundle.DependIDs = buffer.ReadInt32Array();
+ packageBundle.ReferenceBundleIDs = buffer.ReadInt32Array();
FillBundleCollection(manifest, packageBundle);
}
}
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
index c28017a6..57d7a97d 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
@@ -78,6 +78,7 @@ namespace YooAsset
// 读取文件头信息
Manifest = new PackageManifest();
Manifest.FileVersion = fileVersion;
+ Manifest.LegacyDependency = _buffer.ReadBool();
Manifest.EnableAddressable = _buffer.ReadBool();
Manifest.LocationToLower = _buffer.ReadBool();
Manifest.IncludeAssetGUID = _buffer.ReadBool();
@@ -112,6 +113,7 @@ namespace YooAsset
packageAsset.AssetGUID = _buffer.ReadUTF8();
packageAsset.AssetTags = _buffer.ReadUTF8Array();
packageAsset.BundleID = _buffer.ReadInt32();
+ packageAsset.DependBundleIDs = _buffer.ReadInt32Array();
ManifestTools.FillAssetCollection(Manifest, packageAsset);
_packageAssetCount--;
@@ -146,6 +148,7 @@ namespace YooAsset
packageBundle.Encrypted = _buffer.ReadBool();
packageBundle.Tags = _buffer.ReadUTF8Array();
packageBundle.DependIDs = _buffer.ReadInt32Array();
+ packageBundle.ReferenceBundleIDs = _buffer.ReadInt32Array();
ManifestTools.FillBundleCollection(Manifest, packageBundle);
_packageBundleCount--;
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageAsset.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageAsset.cs
index fb5d40b7..7eff1eab 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageAsset.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageAsset.cs
@@ -31,11 +31,18 @@ namespace YooAsset
///
public int BundleID;
+ #region YOOASSET_LEGACY_DEPENDENCY
///
- /// 所属资源包名称(仅编辑器有效)
+ /// 依赖的资源包列表
+ ///
+ public int[] DependBundleIDs;
+ #endregion
+
+ ///
+ /// 临时数据对象(仅编辑器有效)
///
[NonSerialized]
- public string BundleNameInEditor;
+ public object TempDataInEditor;
///
/// 是否包含Tag
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageBundle.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageBundle.cs
index 61060978..4bd00a92 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageBundle.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageBundle.cs
@@ -47,6 +47,14 @@ namespace YooAsset
///
public int[] DependIDs;
+ #region YOOASSET_LEGACY_DEPENDENCY
+ ///
+ /// 引用该资源包的资源包列表
+ /// 说明:谁引用了该资源包
+ ///
+ public int[] ReferenceBundleIDs;
+ #endregion
+
///
/// 资源包GUID
///
@@ -101,6 +109,12 @@ namespace YooAsset
[NonSerialized]
public readonly List IncludeMainAssets = new List(10);
+ ///
+ /// 临时数据对象(仅编辑器有效)
+ ///
+ [NonSerialized]
+ public object TempDataInEditor;
+
public PackageBundle()
{
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
index cb2cbf7f..f9dfa8d7 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
@@ -17,6 +17,11 @@ namespace YooAsset
///
public string FileVersion;
+ ///
+ /// 旧版依赖模式
+ ///
+ public bool LegacyDependency;
+
///
/// 启用可寻址资源定位
///
@@ -155,16 +160,7 @@ namespace YooAsset
{
if (AssetDic.TryGetValue(assetPath, out PackageAsset packageAsset))
{
- int bundleID = packageAsset.BundleID;
- if (bundleID >= 0 && bundleID < BundleList.Count)
- {
- var packageBundle = BundleList[bundleID];
- return packageBundle;
- }
- else
- {
- throw new Exception($"Invalid bundle id : {bundleID} Asset path : {assetPath}");
- }
+ return GetMainPackageBundle(packageAsset.BundleID);
}
else
{
@@ -172,27 +168,58 @@ namespace YooAsset
}
}
+ ///
+ /// 获取主资源包
+ /// 注意:传入的资源包ID一定合法有效!
+ ///
+ public PackageBundle GetMainPackageBundle(int bundleID)
+ {
+ if (bundleID >= 0 && bundleID < BundleList.Count)
+ {
+ var packageBundle = BundleList[bundleID];
+ return packageBundle;
+ }
+ else
+ {
+ throw new Exception($"Invalid bundle id : {bundleID}");
+ }
+ }
+
///
/// 获取资源依赖列表
/// 注意:传入的资源路径一定合法有效!
///
public PackageBundle[] GetAllDependencies(string assetPath)
{
- var packageBundle = GetMainPackageBundle(assetPath);
- List result = new List(packageBundle.DependIDs.Length);
- foreach (var dependID in packageBundle.DependIDs)
+ // YOOASSET_LEGACY_DEPENDENCY
+ if (LegacyDependency)
{
- if (dependID >= 0 && dependID < BundleList.Count)
+ if (TryGetPackageAsset(assetPath, out PackageAsset packageAsset))
{
- var dependBundle = BundleList[dependID];
- result.Add(dependBundle);
+ List result = new List(packageAsset.DependBundleIDs.Length);
+ foreach (var dependID in packageAsset.DependBundleIDs)
+ {
+ var dependBundle = GetMainPackageBundle(dependID);
+ result.Add(dependBundle);
+ }
+ return result.ToArray();
}
else
{
- throw new Exception($"Invalid bundle id : {dependID} Asset path : {assetPath}");
+ throw new Exception("Should never get here !");
}
}
- return result.ToArray();
+ else
+ {
+ var packageBundle = GetMainPackageBundle(assetPath);
+ List result = new List(packageBundle.DependIDs.Length);
+ foreach (var dependID in packageBundle.DependIDs)
+ {
+ var dependBundle = GetMainPackageBundle(dependID);
+ result.Add(dependBundle);
+ }
+ return result.ToArray();
+ }
}
///
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs
index 50e12845..69f1a055 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs
@@ -135,6 +135,12 @@ namespace YooAsset
}
return result.ToArray();
}
+ string IBundleQuery.GetMainBundleName(int bundleID)
+ {
+ // 注意:如果清单里未找到资源包会抛出异常!
+ var packageBundle = ActiveManifest.GetMainPackageBundle(bundleID);
+ return packageBundle.BundleName;
+ }
string IBundleQuery.GetMainBundleName(AssetInfo assetInfo)
{
if (assetInfo.IsInvalid)
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/HostPlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/HostPlayModeImpl.cs
index 759ab004..7debfd20 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/HostPlayModeImpl.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/HostPlayModeImpl.cs
@@ -144,6 +144,12 @@ namespace YooAsset
}
return result.ToArray();
}
+ string IBundleQuery.GetMainBundleName(int bundleID)
+ {
+ // 注意:如果清单里未找到资源包会抛出异常!
+ var packageBundle = ActiveManifest.GetMainPackageBundle(bundleID);
+ return packageBundle.BundleName;
+ }
string IBundleQuery.GetMainBundleName(AssetInfo assetInfo)
{
if (assetInfo.IsInvalid)
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/OfflinePlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/OfflinePlayModeImpl.cs
index 8e34a34b..93918d11 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/OfflinePlayModeImpl.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/OfflinePlayModeImpl.cs
@@ -135,6 +135,12 @@ namespace YooAsset
}
return result.ToArray();
}
+ string IBundleQuery.GetMainBundleName(int bundleID)
+ {
+ // 注意:如果清单里未找到资源包会抛出异常!
+ var packageBundle = ActiveManifest.GetMainPackageBundle(bundleID);
+ return packageBundle.BundleName;
+ }
string IBundleQuery.GetMainBundleName(AssetInfo assetInfo)
{
if (assetInfo.IsInvalid)
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/WebPlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/WebPlayModeImpl.cs
index f280b145..03a6c2c0 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/WebPlayModeImpl.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/WebPlayModeImpl.cs
@@ -163,6 +163,12 @@ namespace YooAsset
}
return result.ToArray();
}
+ string IBundleQuery.GetMainBundleName(int bundleID)
+ {
+ // 注意:如果清单里未找到资源包会抛出异常!
+ var packageBundle = ActiveManifest.GetMainPackageBundle(bundleID);
+ return packageBundle.BundleName;
+ }
string IBundleQuery.GetMainBundleName(AssetInfo assetInfo)
{
if (assetInfo.IsInvalid)
diff --git a/Assets/YooAsset/Runtime/Settings/YooAssetSettings.cs b/Assets/YooAsset/Runtime/Settings/YooAssetSettings.cs
index 52da20f9..22928753 100644
--- a/Assets/YooAsset/Runtime/Settings/YooAssetSettings.cs
+++ b/Assets/YooAsset/Runtime/Settings/YooAssetSettings.cs
@@ -29,7 +29,7 @@ namespace YooAsset
///
/// 清单文件格式版本
///
- public const string ManifestFileVersion = "2.2.5";
+ public const string ManifestFileVersion = "2.3.0";
///