From 6d6fd3af2c8a3305adbb9342e16d1442913ae727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Tue, 24 Dec 2024 17:35:26 +0800 Subject: [PATCH] update assetbundle builder --- .../AssetBundleSimulateBuilder.cs | 45 +++++++++------ .../AssetBundleBuilder/BuildParameters.cs | 7 ++- .../BaseTasks/TaskCreateManifest.cs | 55 ++++++++++++------- .../BuiltinBuildPipeline.cs | 2 +- .../BuiltinBuildPipelineViewer.cs | 1 + .../EditorSimulateBuildpipelineViewer.cs | 1 + .../RawfileBuildpipelineViewer.cs | 1 + .../ScriptableBuildPipelineViewer.cs | 1 + 8 files changed, 74 insertions(+), 39 deletions(-) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleSimulateBuilder.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleSimulateBuilder.cs index 2a0c2014..bf18abf1 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleSimulateBuilder.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleSimulateBuilder.cs @@ -11,28 +11,39 @@ namespace YooAsset.Editor public static EditorSimulateBuildResult SimulateBuild(EditorSimulateBuildParam buildParam) { string packageName = buildParam.PackageName; - var buildParameters = new EditorSimulateBuildParameters(); - buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); - buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); - buildParameters.BuildPipeline = EBuildPipeline.EditorSimulateBuildPipeline.ToString(); - buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget; - buildParameters.PackageName = packageName; - buildParameters.PackageVersion = "Simulate"; - buildParameters.FileNameStyle = EFileNameStyle.HashName; - buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None; - buildParameters.BuildinFileCopyParams = string.Empty; + string buildPipelineName = buildParam.BuildPipelineName; - var pipeline = new EditorSimulateBuildPipeline(); - BuildResult buildResult = pipeline.Run(buildParameters, false); - if (buildResult.Success) + if (buildPipelineName == "EditorSimulateBuildPipeline") { - var reulst = new EditorSimulateBuildResult(); - reulst.PackageRootDirectory = buildResult.OutputPackageDirectory; - return reulst; + var buildParameters = new EditorSimulateBuildParameters(); + buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); + buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); + buildParameters.BuildPipeline = EBuildPipeline.EditorSimulateBuildPipeline.ToString(); + buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle; + buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget; + buildParameters.PackageName = packageName; + buildParameters.PackageVersion = "Simulate"; + buildParameters.FileNameStyle = EFileNameStyle.HashName; + buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None; + buildParameters.BuildinFileCopyParams = string.Empty; + + var pipeline = new EditorSimulateBuildPipeline(); + BuildResult buildResult = pipeline.Run(buildParameters, false); + if (buildResult.Success) + { + var reulst = new EditorSimulateBuildResult(); + reulst.PackageRootDirectory = buildResult.OutputPackageDirectory; + return reulst; + } + else + { + Debug.LogError(buildResult.ErrorInfo); + throw new System.Exception($"{nameof(EditorSimulateBuildPipeline)} build failed !"); + } } else { - return null; + throw new System.NotImplementedException(buildPipelineName); } } } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs index 5674d327..d4d35f24 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs @@ -22,10 +22,15 @@ namespace YooAsset.Editor public string BuildinFileRoot; /// - /// 构建管线 + /// 构建管线名称 /// public string BuildPipeline; + /// + /// 构建资源包类型 + /// + public int BuildBundleType; + /// /// 构建的平台 /// diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs index 974f8d8f..ba1e35c9 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs @@ -12,7 +12,7 @@ namespace YooAsset.Editor public abstract class TaskCreateManifest { - private readonly Dictionary _cachedBundleID = new Dictionary(10000); + private readonly Dictionary _cachedBundleIndexIDs = new Dictionary(10000); private readonly Dictionary> _cacheBundleTags = new Dictionary>(10000); /// @@ -35,12 +35,16 @@ namespace YooAsset.Editor manifest.LocationToLower = buildMapContext.Command.LocationToLower; manifest.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID; manifest.OutputNameStyle = (int)buildParameters.FileNameStyle; + manifest.BuildBundleType = buildParameters.BuildBundleType; manifest.BuildPipeline = buildParameters.BuildPipeline; manifest.PackageName = buildParameters.PackageName; manifest.PackageVersion = buildParameters.PackageVersion; manifest.PackageNote = buildParameters.PackageNote; - manifest.BundleList = GetAllPackageBundle(buildMapContext); - manifest.AssetList = GetAllPackageAsset(buildMapContext); + manifest.AssetList = CreatePackageAssetList(buildMapContext); + manifest.BundleList = CreatePackageBundleList(buildMapContext); + + // 处理资源清单的ID数据 + ProcessPacakgeIDs(manifest); // 处理资源包的依赖列表 if (processBundleDepends) @@ -118,9 +122,9 @@ namespace YooAsset.Editor protected abstract string[] GetBundleDepends(BuildContext context, string bundleName); /// - /// 获取主资源对象列表 + /// 创建资源对象列表 /// - private List GetAllPackageAsset(BuildMapContext buildMapContext) + private List CreatePackageAssetList(BuildMapContext buildMapContext) { List result = new List(1000); foreach (var bundleInfo in buildMapContext.Collection) @@ -133,7 +137,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.BundleID = GetCachedBundleID(assetInfo.BundleName); + packageAsset.BundleNameInEditor = assetInfo.BundleName; result.Add(packageAsset); } } @@ -144,9 +148,9 @@ namespace YooAsset.Editor } /// - /// 获取资源包列表 + /// 创建资源包列表 /// - private List GetAllPackageBundle(BuildMapContext buildMapContext) + private List CreatePackageBundleList(BuildMapContext buildMapContext) { List result = new List(1000); foreach (var bundleInfo in buildMapContext.Collection) @@ -154,18 +158,29 @@ namespace YooAsset.Editor var packageBundle = bundleInfo.CreatePackageBundle(); result.Add(packageBundle); } - + // 按照BundleName排序 result.Sort((a, b) => a.BundleName.CompareTo(b.BundleName)); + return result; + } - // 注意:缓存资源包索引 - for (int index = 0; index < result.Count; index++) + /// + /// 处理资源清单的ID数据 + /// + private void ProcessPacakgeIDs(PackageManifest manifest) + { + // 注意:优先缓存资源包索引 + for (int index = 0; index < manifest.BundleList.Count; index++) { - string bundleName = result[index].BundleName; - _cachedBundleID.Add(bundleName, index); + string bundleName = manifest.BundleList[index].BundleName; + _cachedBundleIndexIDs.Add(bundleName, index); } - return result; + foreach (var packageAsset in manifest.AssetList) + { + string bundleName = packageAsset.BundleNameInEditor; + packageAsset.BundleID = GetCachedBundleIndexID(bundleName); + } } /// @@ -176,12 +191,12 @@ namespace YooAsset.Editor // 查询引擎生成的资源包依赖关系,然后记录到清单 foreach (var packageBundle in manifest.BundleList) { - int mainBundleID = GetCachedBundleID(packageBundle.BundleName); + int mainBundleID = GetCachedBundleIndexID(packageBundle.BundleName); var depends = GetBundleDepends(context, packageBundle.BundleName); List dependIDs = new List(depends.Length); foreach (var dependBundleName in depends) { - int bundleID = GetCachedBundleID(dependBundleName); + int bundleID = GetCachedBundleIndexID(dependBundleName); if (bundleID != mainBundleID) dependIDs.Add(bundleID); } @@ -239,13 +254,13 @@ namespace YooAsset.Editor } /// - /// 获取资源包的索引ID + /// 获取缓存的资源包的索引ID /// - private int GetCachedBundleID(string bundleName) + private int GetCachedBundleIndexID(string bundleName) { - if (_cachedBundleID.TryGetValue(bundleName, out int value) == false) + if (_cachedBundleIndexIDs.TryGetValue(bundleName, out int value) == false) { - throw new Exception($"Should never get here ! Not found bundle ID : {bundleName}"); + throw new Exception($"Should never get here ! Not found bundle index ID : {bundleName}"); } return value; } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuiltinBuildPipeline.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuiltinBuildPipeline.cs index 177803f0..3341a922 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuiltinBuildPipeline.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuiltinBuildPipeline.cs @@ -9,7 +9,7 @@ namespace YooAsset.Editor public BuildResult Run(BuildParameters buildParameters, bool enableLog) { if (buildParameters is BuiltinBuildParameters) - { + { AssetBundleBuilder builder = new AssetBundleBuilder(); return builder.Run(buildParameters, GetDefaultBuildPipeline(), enableLog); } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipelineViewer.cs index 5a62c754..c3912426 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipelineViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipelineViewer.cs @@ -33,6 +33,7 @@ namespace YooAsset.Editor buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildPipeline = BuildPipeline.ToString(); + buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle; buildParameters.BuildTarget = BuildTarget; buildParameters.PackageName = PackageName; buildParameters.PackageVersion = GetPackageVersion(); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs index ab09812b..771da046 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs @@ -50,6 +50,7 @@ namespace YooAsset.Editor buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildPipeline = BuildPipeline.ToString(); + buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle; buildParameters.BuildTarget = BuildTarget; buildParameters.PackageName = PackageName; buildParameters.PackageVersion = GetPackageVersion(); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipelineViewer.cs index 2d666cb7..1f493fd9 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipelineViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipelineViewer.cs @@ -34,6 +34,7 @@ namespace YooAsset.Editor buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildPipeline = BuildPipeline.ToString(); + buildParameters.BuildBundleType = (int)EBuildBundleType.RawBundle; buildParameters.BuildTarget = BuildTarget; buildParameters.PackageName = PackageName; buildParameters.PackageVersion = GetPackageVersion(); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs index 9822ead7..7b11b3ca 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs @@ -33,6 +33,7 @@ namespace YooAsset.Editor buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildPipeline = BuildPipeline.ToString(); + buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle; buildParameters.BuildTarget = BuildTarget; buildParameters.PackageName = PackageName; buildParameters.PackageVersion = GetPackageVersion();