Compare commits

...

5 Commits

Author SHA1 Message Date
何冠峰 a5b68b28b2 update asset bundle builder 2025-02-20 11:27:44 +08:00
何冠峰 bd285faf37 update space shooter 2025-02-20 11:27:30 +08:00
何冠峰 8a4960b560 code style 2025-02-20 11:02:59 +08:00
何冠峰 83c6ae2057 update asset bundle builder
修复怀旧依赖模式下,TAG传染不正确的问题。
2025-02-20 11:01:25 +08:00
何冠峰 b71563e889 Update EBuildBundleType.cs 2025-02-20 10:02:12 +08:00
5 changed files with 76 additions and 38 deletions

View File

@ -52,7 +52,7 @@ namespace YooAsset.Editor
public string PackageNote;
/// <summary>
/// 旧版依赖模式
/// 怀旧版依赖模式
/// 说明兼容YooAssets1.5.x版本
/// </summary>
public bool LegacyDependency = false;

View File

@ -44,14 +44,14 @@ namespace YooAsset.Editor
manifest.AssetList = CreatePackageAssetList(buildMapContext);
manifest.BundleList = CreatePackageBundleList(buildMapContext);
// 处理资源清单的资源对象
// 1. 处理资源清单的资源对象
ProcessPacakgeAsset(manifest);
// 处理资源包的依赖列表
// 2. 处理资源包的依赖列表
if (processBundleDepends)
ProcessBundleDepends(context, manifest);
// 处理资源包的标签集合
// 3. 处理资源包的标签集合
if (processBundleTags)
ProcessBundleTags(manifest);
@ -191,6 +191,19 @@ namespace YooAsset.Editor
var assetInfo = packageAsset.TempDataInEditor as BuildAssetInfo;
packageAsset.BundleID = GetCachedBundleIndexID(assetInfo.BundleName);
}
#region YOOASSET_LEGACY_DEPENDENCY
if (manifest.LegacyDependency)
{
// 记录资源对象依赖的资源包ID集合
// 注意:依赖关系非引擎构建结果里查询!
foreach (var packageAsset in manifest.AssetList)
{
var mainAssetInfo = packageAsset.TempDataInEditor as BuildAssetInfo;
packageAsset.DependBundleIDs = GetAssetDependBundleIDs(mainAssetInfo);
}
}
#endregion
}
/// <summary>
@ -212,6 +225,23 @@ namespace YooAsset.Editor
}
packageBundle.DependIDs = dependIDs.ToArray();
}
#region YOOASSET_LEGACY_DEPENDENCY
if (manifest.LegacyDependency)
{
foreach (var packageBundle in manifest.BundleList)
{
var dependIDs = packageBundle.DependIDs;
packageBundle.TempDataInEditor = new DependencyQuery(dependIDs);
}
// 记录引用该资源包的资源包ID集合
foreach (var packageBundle in manifest.BundleList)
{
packageBundle.ReferenceBundleIDs = GetBundleReferenceBundleIDs(manifest, packageBundle);
}
}
#endregion
}
/// <summary>
@ -219,23 +249,51 @@ namespace YooAsset.Editor
/// </summary>
private void ProcessBundleTags(PackageManifest manifest)
{
// 将主资源的标签信息传染给其依赖的资源包集合
foreach (var packageAsset in manifest.AssetList)
foreach (var packageBundle in manifest.BundleList)
{
var assetTags = packageAsset.AssetTags;
int bundleID = packageAsset.BundleID;
CacheBundleTags(bundleID, assetTags);
packageBundle.Tags = Array.Empty<string>();
}
var packageBundle = manifest.BundleList[bundleID];
if (packageBundle.DependIDs != null)
// YOOASSET_LEGACY_DEPENDENCY
if (manifest.LegacyDependency)
{
// 将主资源的标签信息传染给其依赖的资源包集合
foreach (var packageAsset in manifest.AssetList)
{
foreach (var dependBundleID in packageBundle.DependIDs)
var assetTags = packageAsset.AssetTags;
int bundleID = packageAsset.BundleID;
CacheBundleTags(bundleID, assetTags);
if (packageAsset.DependBundleIDs != null)
{
CacheBundleTags(dependBundleID, assetTags);
foreach (var dependBundleID in packageAsset.DependBundleIDs)
{
CacheBundleTags(dependBundleID, assetTags);
}
}
}
}
else
{
// 将主资源的标签信息传染给其依赖的资源包集合
foreach (var packageAsset in manifest.AssetList)
{
var assetTags = packageAsset.AssetTags;
int bundleID = packageAsset.BundleID;
CacheBundleTags(bundleID, assetTags);
var packageBundle = manifest.BundleList[bundleID];
if (packageBundle.DependIDs != null)
{
foreach (var dependBundleID in packageBundle.DependIDs)
{
CacheBundleTags(dependBundleID, assetTags);
}
}
}
}
// 将缓存的资源标签赋值给资源包
for (int index = 0; index < manifest.BundleList.Count; index++)
{
var packageBundle = manifest.BundleList[index];
@ -299,26 +357,6 @@ namespace YooAsset.Editor
}
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<TaskBuilding_SBP.BuildResultContext>();

View File

@ -1,7 +1,7 @@

namespace YooAsset
{
internal enum EBuildBundleType
public enum EBuildBundleType
{
/// <summary>
/// 未知类型

View File

@ -18,7 +18,7 @@ namespace YooAsset
public string FileVersion;
/// <summary>
/// 旧版依赖模式
/// 怀旧版依赖模式
/// </summary>
public bool LegacyDependency;

View File

@ -26,7 +26,7 @@ MonoBehaviour:
Groups:
- GroupName: battle
GroupDesc: "\u6218\u6597"
AssetTags:
AssetTags: battle
ActiveRuleName: EnableGroup
Collectors:
- CollectPath: Assets/Samples/Space Shooter/GameRes/Effect
@ -92,7 +92,7 @@ MonoBehaviour:
UserData:
- GroupName: scene
GroupDesc: "\u573A\u666F"
AssetTags:
AssetTags: scene
ActiveRuleName: EnableGroup
Collectors:
- CollectPath: Assets/Samples/Space Shooter/GameRes/Scene
@ -113,7 +113,7 @@ MonoBehaviour:
UserData:
- GroupName: ugui
GroupDesc: "\u9762\u677F"
AssetTags:
AssetTags: ui
ActiveRuleName: EnableGroup
Collectors:
- CollectPath: Assets/Samples/Space Shooter/GameRes/UIPanel