From 1638bb301d1bdae1fb49d6ca162d0008afa75db9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Mon, 16 Dec 2024 16:45:05 +0800 Subject: [PATCH] fix #406 --- .../AssetBundleBuilderWindow.cs | 7 +- .../AssetBundleSimulateBuilder.cs | 72 ++++--------------- .../AssetBundleBuilder/BuildParameters.cs | 38 ---------- .../BaseTasks/TaskCreateManifest.cs | 11 ++- .../BaseTasks/TaskGetBuildMap.cs | 4 +- .../BaseTasks/TaskUpdateBundleInfo.cs | 27 ------- .../BuildTasks/TaskBuilding_BBP.cs | 5 -- .../BuildTasks/TaskCreateManifest_BBP.cs | 2 +- .../BuildTasks/TaskCreatePackage_BBP.cs | 8 +-- .../BuildTasks/TaskCreateReport_BBP.cs | 7 +- .../BuildTasks/TaskGetBuildMap_BBP.cs | 2 +- .../BuildTasks/TaskPrepare_BBP.cs | 39 ++++++++-- .../BuildTasks/TaskUpdateBundleInfo_BBP.cs | 60 ++++------------ .../BuildTasks/TaskVerifyBuildResult_BBP.cs | 4 -- .../EditorSimulateBuildPipeline.meta | 8 +++ .../BuildTasks.meta | 8 +++ .../BuildTasks/TaskCreateManifest_ESBP.cs | 18 +++++ .../TaskCreateManifest_ESBP.cs.meta | 11 +++ .../BuildTasks/TaskGetBuildMap_ESBP.cs | 15 ++++ .../BuildTasks/TaskGetBuildMap_ESBP.cs.meta | 11 +++ .../BuildTasks/TaskPrepare_ESBP.cs | 17 +++++ .../BuildTasks/TaskPrepare_ESBP.cs.meta | 11 +++ .../BuildTasks/TaskUpdateBundleInfo_ESBP.cs | 63 ++++++++++++++++ .../TaskUpdateBundleInfo_ESBP.cs.meta | 11 +++ .../EditorSimulateBuildParameters.cs | 7 ++ .../EditorSimulateBuildParameters.cs.meta | 11 +++ .../EditorSimulateBuildPipeline.cs | 37 ++++++++++ .../EditorSimulateBuildPipeline.cs.meta | 11 +++ .../BuildTasks/TaskCopyBuildinFiles_RFBP.cs | 8 +-- .../BuildTasks/TaskCreateManifest_RFBP.cs | 2 +- .../BuildTasks/TaskCreatePackage_RFBP.cs | 8 +-- .../BuildTasks/TaskCreateReport_RFBP.cs | 7 +- .../BuildTasks/TaskGetBuildMap_RFBP.cs | 2 +- .../BuildTasks/TaskPrepare_RFBP.cs | 32 +++++++-- .../BuildTasks/TaskUpdateBundleInfo_RFBP.cs | 32 ++------- .../BuildTasks/TaskBuilding_SBP.cs | 5 -- .../BuildTasks/TaskCreateManifest_SBP.cs | 2 +- .../BuildTasks/TaskCreatePackage_SBP.cs | 8 +-- .../BuildTasks/TaskCreateReport_SBP.cs | 7 +- .../BuildTasks/TaskGetBuildMap_SBP.cs | 2 +- .../BuildTasks/TaskPrepare_SBP.cs | 22 ++++++ .../BuildTasks/TaskUpdateBundleInfo_SBP.cs | 60 ++++------------ .../BuildTasks/TaskVerifyBuildResult_SBP.cs | 4 -- .../BuildSystem/ErrorCode.cs | 1 - .../Editor/AssetBundleBuilder/EBuildMode.cs | 5 -- .../AssetBundleBuilder/EBuildPipeline.cs | 5 ++ .../BuiltinBuildPipelineViewer.cs | 1 - .../EditorSimulateBuildpipelineViewer.cs | 72 +++++++++++++++++++ .../EditorSimulateBuildpipelineViewer.cs.meta | 11 +++ .../RawfileBuildpipelineViewer.cs | 1 - .../ScriptableBuildPipelineViewer.cs | 1 - .../AssetBundleCollector.cs | 4 +- .../AssetBundleCollectorSetting.cs | 4 +- .../AssetBundleCollectorWindow.cs | 8 +-- .../AssetBundleCollector/CollectCommand.cs | 8 +-- 55 files changed, 496 insertions(+), 351 deletions(-) create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline.meta create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks.meta create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskCreateManifest_ESBP.cs create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskCreateManifest_ESBP.cs.meta create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs.meta create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs.meta create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskUpdateBundleInfo_ESBP.cs create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskUpdateBundleInfo_ESBP.cs.meta create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs.meta create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildPipeline.cs create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildPipeline.cs.meta create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs create mode 100644 Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs.meta diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderWindow.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderWindow.cs index d6ea3eac..c97246c5 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderWindow.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderWindow.cs @@ -69,6 +69,7 @@ namespace YooAsset.Editor { _pipelineMenu = new ToolbarMenu(); _pipelineMenu.style.width = 200; + _pipelineMenu.menu.AppendAction(EBuildPipeline.EditorSimulateBuildPipeline.ToString(), PipelineMenuAction, PipelineMenuFun, EBuildPipeline.EditorSimulateBuildPipeline); _pipelineMenu.menu.AppendAction(EBuildPipeline.BuiltinBuildPipeline.ToString(), PipelineMenuAction, PipelineMenuFun, EBuildPipeline.BuiltinBuildPipeline); _pipelineMenu.menu.AppendAction(EBuildPipeline.ScriptableBuildPipeline.ToString(), PipelineMenuAction, PipelineMenuFun, EBuildPipeline.ScriptableBuildPipeline); _pipelineMenu.menu.AppendAction(EBuildPipeline.RawFileBuildPipeline.ToString(), PipelineMenuAction, PipelineMenuFun, EBuildPipeline.RawFileBuildPipeline); @@ -93,7 +94,11 @@ namespace YooAsset.Editor _pipelineMenu.text = _buildPipeline.ToString(); var buildTarget = EditorUserBuildSettings.activeBuildTarget; - if (_buildPipeline == EBuildPipeline.BuiltinBuildPipeline) + if (_buildPipeline == EBuildPipeline.EditorSimulateBuildPipeline) + { + var viewer = new EditorSimulateBuildPipelineViewer(_buildPackage, buildTarget, _container); + } + else if (_buildPipeline == EBuildPipeline.BuiltinBuildPipeline) { var viewer = new BuiltinBuildPipelineViewer(_buildPackage, buildTarget, _container); } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleSimulateBuilder.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleSimulateBuilder.cs index 698402ee..9b5e86f5 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleSimulateBuilder.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleSimulateBuilder.cs @@ -10,66 +10,20 @@ namespace YooAsset.Editor /// public static SimulateBuildResult SimulateBuild(string buildPipelineName, string packageName) { - string packageVersion = "Simulate"; - BuildResult buildResult; + var buildParameters = new EditorSimulateBuildParameters(); + buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); + buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); + buildParameters.BuildPipeline = EBuildPipeline.EditorSimulateBuildPipeline.ToString(); + buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget; + buildParameters.BuildMode = EBuildMode.ForceRebuild; + buildParameters.PackageName = packageName; + buildParameters.PackageVersion = "Simulate"; + buildParameters.FileNameStyle = EFileNameStyle.HashName; + buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None; + buildParameters.BuildinFileCopyParams = string.Empty; - if (buildPipelineName == EBuildPipeline.BuiltinBuildPipeline.ToString()) - { - BuiltinBuildParameters buildParameters = new BuiltinBuildParameters(); - buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); - buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); - buildParameters.BuildPipeline = buildPipelineName; - buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget; - buildParameters.BuildMode = EBuildMode.SimulateBuild; - buildParameters.PackageName = packageName; - buildParameters.PackageVersion = packageVersion; - buildParameters.FileNameStyle = EFileNameStyle.HashName; - buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None; - buildParameters.BuildinFileCopyParams = string.Empty; - - BuiltinBuildPipeline pipeline = new BuiltinBuildPipeline(); - buildResult = pipeline.Run(buildParameters, false); - } - else if (buildPipelineName == EBuildPipeline.ScriptableBuildPipeline.ToString()) - { - ScriptableBuildParameters buildParameters = new ScriptableBuildParameters(); - buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); - buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); - buildParameters.BuildPipeline = buildPipelineName; - buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget; - buildParameters.BuildMode = EBuildMode.SimulateBuild; - buildParameters.PackageName = packageName; - buildParameters.PackageVersion = packageVersion; - buildParameters.FileNameStyle = EFileNameStyle.HashName; - buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None; - buildParameters.BuildinFileCopyParams = string.Empty; - - ScriptableBuildPipeline pipeline = new ScriptableBuildPipeline(); - buildResult = pipeline.Run(buildParameters, true); - } - else if (buildPipelineName == EBuildPipeline.RawFileBuildPipeline.ToString()) - { - RawFileBuildParameters buildParameters = new RawFileBuildParameters(); - buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); - buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); - buildParameters.BuildPipeline = buildPipelineName; - buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget; - buildParameters.BuildMode = EBuildMode.SimulateBuild; - buildParameters.PackageName = packageName; - buildParameters.PackageVersion = packageVersion; - buildParameters.FileNameStyle = EFileNameStyle.HashName; - buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None; - buildParameters.BuildinFileCopyParams = string.Empty; - - RawFileBuildPipeline pipeline = new RawFileBuildPipeline(); - buildResult = pipeline.Run(buildParameters, true); - } - else - { - throw new System.NotImplementedException(buildPipelineName); - } - - // 返回结果 + var pipeline = new EditorSimulateBuildPipeline(); + BuildResult buildResult = pipeline.Run(buildParameters, false); if (buildResult.Success) { SimulateBuildResult reulst = new SimulateBuildResult(); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs index 06f166fe..dfd5bd22 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs @@ -99,16 +99,6 @@ namespace YooAsset.Editor throw new Exception(message); } - // 检测是否有未保存场景 - if (BuildMode != EBuildMode.SimulateBuild) - { - if (EditorTools.HasDirtyScenes()) - { - string message = BuildLogger.GetErrorMessage(ErrorCode.FoundUnsavedScene, "Found unsaved scene !"); - throw new Exception(message); - } - } - // 检测构建参数合法性 if (BuildTarget == BuildTarget.NoTarget) { @@ -136,34 +126,6 @@ namespace YooAsset.Editor throw new Exception(message); } - // 强制构建删除包裹目录 - if (BuildMode == EBuildMode.ForceRebuild) - { - string packageRootDirectory = GetPackageRootDirectory(); - if (EditorTools.DeleteDirectory(packageRootDirectory)) - { - BuildLogger.Log($"Delete package root directory: {packageRootDirectory}"); - } - } - - // 检测包裹输出目录是否存在 - if (BuildMode != EBuildMode.SimulateBuild) - { - string packageOutputDirectory = GetPackageOutputDirectory(); - if (Directory.Exists(packageOutputDirectory)) - { - string message = BuildLogger.GetErrorMessage(ErrorCode.PackageOutputDirectoryExists, $"Package outout directory exists: {packageOutputDirectory}"); - throw new Exception(message); - } - } - - // 如果输出目录不存在 - string pipelineOutputDirectory = GetPipelineOutputDirectory(); - if (EditorTools.CreateDirectory(pipelineOutputDirectory)) - { - BuildLogger.Log($"Create pipeline output directory: {pipelineOutputDirectory}"); - } - // 设置默认备注信息 if (string.IsNullOrEmpty(PackageNote)) { diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs index 42afb929..5147938f 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs @@ -18,7 +18,7 @@ namespace YooAsset.Editor /// /// 创建补丁清单文件到输出目录 /// - protected void CreateManifestFile(BuildContext context) + protected void CreateManifestFile(bool processBundleDepends, bool processBundleTags, BuildContext context) { var buildMapContext = context.GetContextObject(); var buildParametersContext = context.GetContextObject(); @@ -42,14 +42,13 @@ namespace YooAsset.Editor manifest.BundleList = GetAllPackageBundle(buildMapContext); manifest.AssetList = GetAllPackageAsset(buildMapContext); - if (buildParameters.BuildMode != EBuildMode.SimulateBuild) - { - // 处理资源包的依赖列表 + // 处理资源包的依赖列表 + if (processBundleDepends) ProcessBundleDepends(context, manifest); - // 处理资源包的标签集合 + // 处理资源包的标签集合 + if (processBundleTags) ProcessBundleTags(manifest); - } // 创建补丁清单文本文件 { diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs index 68be80dd..190d9a63 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs @@ -12,7 +12,7 @@ namespace YooAsset.Editor /// /// 生成资源构建上下文 /// - public BuildMapContext CreateBuildMap(BuildParameters buildParameters) + public BuildMapContext CreateBuildMap(bool simulateBuild, BuildParameters buildParameters) { BuildMapContext context = new BuildMapContext(); var buildMode = buildParameters.BuildMode; @@ -21,7 +21,7 @@ namespace YooAsset.Editor Dictionary allBuildAssetInfos = new Dictionary(1000); // 1. 获取所有收集器收集的资源 - var collectResult = AssetBundleCollectorSettingData.Setting.GetPackageAssets(buildMode, packageName); + var collectResult = AssetBundleCollectorSettingData.Setting.GetPackageAssets(simulateBuild, packageName); List allCollectAssets = collectResult.CollectAssets; // 2. 剔除未被引用的依赖项资源 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs index 7cf43ecc..2889381a 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs @@ -65,32 +65,5 @@ namespace YooAsset.Editor protected abstract string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext); protected abstract string GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext); protected abstract long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext); - - protected string GetFilePathTempHash(string filePath) - { - byte[] bytes = Encoding.UTF8.GetBytes(filePath); - return HashUtility.BytesMD5(bytes); - - // 注意:在文件路径的哈希值冲突的情况下,可以使用下面的方法 - //return $"{HashUtility.BytesMD5(bytes)}-{Guid.NewGuid():N}"; - } - protected long GetBundleTempSize(BuildBundleInfo bundleInfo) - { - long tempSize = 0; - - var assetPaths = bundleInfo.GetAllMainAssetPaths(); - foreach (var assetPath in assetPaths) - { - long size = FileUtility.GetFileSize(assetPath); - tempSize += size; - } - - if (tempSize == 0) - { - string message = BuildLogger.GetErrorMessage(ErrorCode.BundleTempSizeIsZero, $"Bundle temp size is zero, check bundle main asset list : {bundleInfo.BundleName}"); - throw new Exception(message); - } - return tempSize; - } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskBuilding_BBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskBuilding_BBP.cs index f722b055..83709a9e 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskBuilding_BBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskBuilding_BBP.cs @@ -20,11 +20,6 @@ namespace YooAsset.Editor var buildMapContext = context.GetContextObject(); var builtinBuildParameters = buildParametersContext.Parameters as BuiltinBuildParameters; - // 模拟构建模式下跳过引擎构建 - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return; - // 开始构建 string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory(); BuildAssetBundleOptions buildOptions = builtinBuildParameters.GetBundleBuildOptions(); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreateManifest_BBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreateManifest_BBP.cs index 32c46ea8..ea5f468c 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreateManifest_BBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreateManifest_BBP.cs @@ -11,7 +11,7 @@ namespace YooAsset.Editor void IBuildTask.Run(BuildContext context) { - CreateManifestFile(context); + CreateManifestFile(true, true, context); } protected override string[] GetBundleDepends(BuildContext context, string bundleName) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreatePackage_BBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreatePackage_BBP.cs index eeaa6eb4..0ef47257 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreatePackage_BBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreatePackage_BBP.cs @@ -9,17 +9,13 @@ namespace YooAsset.Editor { var buildParameters = context.GetContextObject(); var buildMapContext = context.GetContextObject(); - var buildMode = buildParameters.Parameters.BuildMode; - if (buildMode != EBuildMode.SimulateBuild) - { - CreatePackageCatalog(buildParameters, buildMapContext); - } + CreatePackagePatch(buildParameters, buildMapContext); } /// /// 拷贝补丁文件到补丁包目录 /// - private void CreatePackageCatalog(BuildParametersContext buildParametersContext, BuildMapContext buildMapContext) + private void CreatePackagePatch(BuildParametersContext buildParametersContext, BuildMapContext buildMapContext) { string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory(); string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory(); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreateReport_BBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreateReport_BBP.cs index aa363adf..0d33a3e1 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreateReport_BBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskCreateReport_BBP.cs @@ -13,12 +13,7 @@ namespace YooAsset.Editor var buildParameters = context.GetContextObject(); var buildMapContext = context.GetContextObject(); var manifestContext = context.GetContextObject(); - - var buildMode = buildParameters.Parameters.BuildMode; - if (buildMode != EBuildMode.SimulateBuild) - { - CreateReportFile(buildParameters, buildMapContext, manifestContext); - } + CreateReportFile(buildParameters, buildMapContext, manifestContext); } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskGetBuildMap_BBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskGetBuildMap_BBP.cs index 68a6cc00..3e8eadf8 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskGetBuildMap_BBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskGetBuildMap_BBP.cs @@ -12,7 +12,7 @@ namespace YooAsset.Editor void IBuildTask.Run(BuildContext context) { var buildParametersContext = context.GetContextObject(); - var buildMapContext = CreateBuildMap(buildParametersContext.Parameters); + var buildMapContext = CreateBuildMap(false, buildParametersContext.Parameters); context.SetContextObject(buildMapContext); } } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskPrepare_BBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskPrepare_BBP.cs index bcceb303..4c7f6dfb 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskPrepare_BBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskPrepare_BBP.cs @@ -17,13 +17,42 @@ namespace YooAsset.Editor // 检测基础构建参数 buildParametersContext.CheckBuildParameters(); + // 检测是否有未保存场景 + if (EditorTools.HasDirtyScenes()) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.FoundUnsavedScene, "Found unsaved scene !"); + throw new Exception(message); + } + + // 强制构建删除包裹目录 + if (buildParameters.BuildMode == EBuildMode.ForceRebuild) + { + string packageRootDirectory = buildParameters.GetPackageRootDirectory(); + if (EditorTools.DeleteDirectory(packageRootDirectory)) + { + BuildLogger.Log($"Delete package root directory: {packageRootDirectory}"); + } + } + + // 检测包裹输出目录是否存在 + string packageOutputDirectory = buildParameters.GetPackageOutputDirectory(); + if (Directory.Exists(packageOutputDirectory)) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.PackageOutputDirectoryExists, $"Package outout directory exists: {packageOutputDirectory}"); + throw new Exception(message); + } + + // 如果输出目录不存在 + string pipelineOutputDirectory = buildParameters.GetPipelineOutputDirectory(); + if (EditorTools.CreateDirectory(pipelineOutputDirectory)) + { + BuildLogger.Log($"Create pipeline output directory: {pipelineOutputDirectory}"); + } + // 检测Unity版本 #if UNITY_2021_3_OR_NEWER - if (buildParameters.BuildMode != EBuildMode.SimulateBuild) - { - string warning = BuildLogger.GetErrorMessage(ErrorCode.RecommendScriptBuildPipeline, $"Starting with UnityEngine2021, recommend use script build pipeline (SBP) !"); - BuildLogger.Warning(warning); - } + string warning = BuildLogger.GetErrorMessage(ErrorCode.RecommendScriptBuildPipeline, $"Starting with UnityEngine2021, recommend use script build pipeline (SBP) !"); + BuildLogger.Warning(warning); #endif } } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskUpdateBundleInfo_BBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskUpdateBundleInfo_BBP.cs index 343b641a..96f26f6a 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskUpdateBundleInfo_BBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskUpdateBundleInfo_BBP.cs @@ -15,77 +15,45 @@ namespace YooAsset.Editor protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context) { - var buildParametersContext = context.GetContextObject(); - var parameters = buildParametersContext.Parameters; - var buildMode = parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) + var buildResult = context.GetContextObject(); + var hash = buildResult.UnityManifest.GetAssetBundleHash(bundleInfo.BundleName); + if (hash.isValid) { - return "00000000000000000000000000000000"; //32位 + return hash.ToString(); } else { - var buildResult = context.GetContextObject(); - var hash = buildResult.UnityManifest.GetAssetBundleHash(bundleInfo.BundleName); - if (hash.isValid) - { - return hash.ToString(); - } - else - { - string message = BuildLogger.GetErrorMessage(ErrorCode.NotFoundUnityBundleHash, $"Not found unity bundle hash : {bundleInfo.BundleName}"); - throw new Exception(message); - } + string message = BuildLogger.GetErrorMessage(ErrorCode.NotFoundUnityBundleHash, $"Not found unity bundle hash : {bundleInfo.BundleName}"); + throw new Exception(message); } } protected override uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context) { - var buildParametersContext = context.GetContextObject(); - var parameters = buildParametersContext.Parameters; - var buildMode = parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) + string filePath = bundleInfo.BuildOutputFilePath; + if (BuildPipeline.GetCRCForAssetBundle(filePath, out uint crc)) { - return 0; + return crc; } else { - string filePath = bundleInfo.BuildOutputFilePath; - if (BuildPipeline.GetCRCForAssetBundle(filePath, out uint crc)) - { - return crc; - } - else - { - string message = BuildLogger.GetErrorMessage(ErrorCode.NotFoundUnityBundleCRC, $"Not found unity bundle crc : {bundleInfo.BundleName}"); - throw new Exception(message); - } + string message = BuildLogger.GetErrorMessage(ErrorCode.NotFoundUnityBundleCRC, $"Not found unity bundle crc : {bundleInfo.BundleName}"); + throw new Exception(message); } } protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return GetFilePathTempHash(filePath); - else - return HashUtility.FileMD5(filePath); + return HashUtility.FileMD5(filePath); } protected override string GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if ( buildMode == EBuildMode.SimulateBuild) - return "00000000"; //8位 - else - return HashUtility.FileCRC32(filePath); + return HashUtility.FileCRC32(filePath); } protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return GetBundleTempSize(bundleInfo); - else - return FileUtility.GetFileSize(filePath); + return FileUtility.GetFileSize(filePath); } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskVerifyBuildResult_BBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskVerifyBuildResult_BBP.cs index 0d6af024..099dea9b 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskVerifyBuildResult_BBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BuiltinBuildPipeline/BuildTasks/TaskVerifyBuildResult_BBP.cs @@ -15,10 +15,6 @@ namespace YooAsset.Editor var buildParametersContext = context.GetContextObject(); var buildParameters = buildParametersContext.Parameters as BuiltinBuildParameters; - // 模拟构建模式下跳过验证 - if (buildParameters.BuildMode == EBuildMode.SimulateBuild) - return; - // 验证构建结果 if (buildParameters.VerifyBuildingResult) { diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline.meta new file mode 100644 index 00000000..0bd716d6 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 12f78ad22f0513c44b6037469dbd6363 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks.meta new file mode 100644 index 00000000..ad68e77e --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1138888cdba447345abb498b0c89affa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskCreateManifest_ESBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskCreateManifest_ESBP.cs new file mode 100644 index 00000000..2ce98213 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskCreateManifest_ESBP.cs @@ -0,0 +1,18 @@ + +using System; + +namespace YooAsset.Editor +{ + public class TaskCreateManifest_ESBP : TaskCreateManifest, IBuildTask + { + void IBuildTask.Run(BuildContext context) + { + CreateManifestFile(false, false, context); + } + + protected override string[] GetBundleDepends(BuildContext context, string bundleName) + { + return Array.Empty(); + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskCreateManifest_ESBP.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskCreateManifest_ESBP.cs.meta new file mode 100644 index 00000000..b8278be4 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskCreateManifest_ESBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 120e126cc10604c4f811c3b6377f7452 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs new file mode 100644 index 00000000..e6e22a07 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs @@ -0,0 +1,15 @@ + +using System; + +namespace YooAsset.Editor +{ + public class TaskGetBuildMap_ESBP : TaskGetBuildMap, IBuildTask + { + void IBuildTask.Run(BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + var buildMapContext = CreateBuildMap(true, buildParametersContext.Parameters); + context.SetContextObject(buildMapContext); + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs.meta new file mode 100644 index 00000000..37d60c9c --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 789c337b5b82f1c438a588982dfca346 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs new file mode 100644 index 00000000..0ada64f0 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs @@ -0,0 +1,17 @@ + +using System; + +namespace YooAsset.Editor +{ + public class TaskPrepare_ESBP : IBuildTask + { + void IBuildTask.Run(BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + var buildParameters = buildParametersContext.Parameters; + + // 检测基础构建参数 + buildParametersContext.CheckBuildParameters(); + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs.meta new file mode 100644 index 00000000..5b18d5a6 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abbe56a7120e34349b10f20956ed51a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskUpdateBundleInfo_ESBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskUpdateBundleInfo_ESBP.cs new file mode 100644 index 00000000..88d98a76 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskUpdateBundleInfo_ESBP.cs @@ -0,0 +1,63 @@ + +using System.Text; +using System; + +namespace YooAsset.Editor +{ + public class TaskUpdateBundleInfo_ESBP : TaskUpdateBundleInfo, IBuildTask + { + void IBuildTask.Run(BuildContext context) + { + UpdateBundleInfo(context); + } + + protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context) + { + return "00000000000000000000000000000000"; //32位 + } + protected override uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context) + { + return 0; + } + protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) + { + string filePath = bundleInfo.PackageSourceFilePath; + return GetFilePathTempHash(filePath); + } + protected override string GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) + { + return "00000000"; //8位 + } + protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) + { + return GetBundleTempSize(bundleInfo); + } + + private string GetFilePathTempHash(string filePath) + { + byte[] bytes = Encoding.UTF8.GetBytes(filePath); + return HashUtility.BytesMD5(bytes); + + // 注意:在文件路径的哈希值冲突的情况下,可以使用下面的方法 + //return $"{HashUtility.BytesMD5(bytes)}-{Guid.NewGuid():N}"; + } + private long GetBundleTempSize(BuildBundleInfo bundleInfo) + { + long tempSize = 0; + + var assetPaths = bundleInfo.GetAllMainAssetPaths(); + foreach (var assetPath in assetPaths) + { + long size = FileUtility.GetFileSize(assetPath); + tempSize += size; + } + + if (tempSize == 0) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.BundleTempSizeIsZero, $"Bundle temp size is zero, check bundle main asset list : {bundleInfo.BundleName}"); + throw new Exception(message); + } + return tempSize; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskUpdateBundleInfo_ESBP.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskUpdateBundleInfo_ESBP.cs.meta new file mode 100644 index 00000000..f39b76c8 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskUpdateBundleInfo_ESBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 990b41f647b80a34ab666a3b0c1ba3f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs new file mode 100644 index 00000000..57d2310c --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs @@ -0,0 +1,7 @@ + +namespace YooAsset.Editor +{ + public class EditorSimulateBuildParameters : BuildParameters + { + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs.meta new file mode 100644 index 00000000..0e0051bc --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03ea37371e6dc644cb2e6eabf9e7e2ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildPipeline.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildPipeline.cs new file mode 100644 index 00000000..ff0ac4a7 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildPipeline.cs @@ -0,0 +1,37 @@ + +using System.Collections.Generic; +using System; + +namespace YooAsset.Editor +{ + public class EditorSimulateBuildPipeline : IBuildPipeline + { + public BuildResult Run(BuildParameters buildParameters, bool enableLog) + { + if (buildParameters is EditorSimulateBuildParameters) + { + AssetBundleBuilder builder = new AssetBundleBuilder(); + return builder.Run(buildParameters, GetDefaultBuildPipeline(), enableLog); + } + else + { + throw new Exception($"Invalid build parameter type : {buildParameters.GetType().Name}"); + } + } + + /// + /// 获取默认的构建流程 + /// + private List GetDefaultBuildPipeline() + { + List pipeline = new List + { + new TaskPrepare_ESBP(), + new TaskGetBuildMap_ESBP(), + new TaskUpdateBundleInfo_ESBP(), + new TaskCreateManifest_ESBP() + }; + return pipeline; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildPipeline.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildPipeline.cs.meta new file mode 100644 index 00000000..8627a935 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildPipeline.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9caf8e4846ad8b64eb04a4d5179942ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCopyBuildinFiles_RFBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCopyBuildinFiles_RFBP.cs index 4b9148f3..037d19eb 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCopyBuildinFiles_RFBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCopyBuildinFiles_RFBP.cs @@ -13,13 +13,9 @@ namespace YooAsset.Editor var buildParametersContext = context.GetContextObject(); var buildParameters = buildParametersContext.Parameters; var manifestContext = context.GetContextObject(); - - if (buildParameters.BuildMode != EBuildMode.SimulateBuild) + if (buildParameters.BuildinFileCopyOption != EBuildinFileCopyOption.None) { - if (buildParameters.BuildinFileCopyOption != EBuildinFileCopyOption.None) - { - CopyBuildinFilesToStreaming(buildParametersContext, manifestContext.Manifest); - } + CopyBuildinFilesToStreaming(buildParametersContext, manifestContext.Manifest); } } } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreateManifest_RFBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreateManifest_RFBP.cs index 816063a9..e34dbe90 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreateManifest_RFBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreateManifest_RFBP.cs @@ -9,7 +9,7 @@ namespace YooAsset.Editor { void IBuildTask.Run(BuildContext context) { - CreateManifestFile(context); + CreateManifestFile(false, true, context); } protected override string[] GetBundleDepends(BuildContext context, string bundleName) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreatePackage_RFBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreatePackage_RFBP.cs index f8a2a3b6..65c9d5bc 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreatePackage_RFBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreatePackage_RFBP.cs @@ -9,17 +9,13 @@ namespace YooAsset.Editor { var buildParameters = context.GetContextObject(); var buildMapContext = context.GetContextObject(); - var buildMode = buildParameters.Parameters.BuildMode; - if (buildMode != EBuildMode.SimulateBuild) - { - CreatePackageCatalog(buildParameters, buildMapContext); - } + CreatePackagePatch(buildParameters, buildMapContext); } /// /// 拷贝补丁文件到补丁包目录 /// - private void CreatePackageCatalog(BuildParametersContext buildParametersContext, BuildMapContext buildMapContext) + private void CreatePackagePatch(BuildParametersContext buildParametersContext, BuildMapContext buildMapContext) { string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory(); BuildLogger.Log($"Start making patch package: {packageOutputDirectory}"); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreateReport_RFBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreateReport_RFBP.cs index 83458c9d..10785bdd 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreateReport_RFBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreateReport_RFBP.cs @@ -13,12 +13,7 @@ namespace YooAsset.Editor var buildParameters = context.GetContextObject(); var buildMapContext = context.GetContextObject(); var manifestContext = context.GetContextObject(); - - var buildMode = buildParameters.Parameters.BuildMode; - if (buildMode != EBuildMode.SimulateBuild) - { - CreateReportFile(buildParameters, buildMapContext, manifestContext); - } + CreateReportFile(buildParameters, buildMapContext, manifestContext); } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskGetBuildMap_RFBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskGetBuildMap_RFBP.cs index 88f99beb..720b9336 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskGetBuildMap_RFBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskGetBuildMap_RFBP.cs @@ -12,7 +12,7 @@ namespace YooAsset.Editor void IBuildTask.Run(BuildContext context) { var buildParametersContext = context.GetContextObject(); - var buildMapContext = CreateBuildMap(buildParametersContext.Parameters); + var buildMapContext = CreateBuildMap(true, buildParametersContext.Parameters); context.SetContextObject(buildMapContext); // 检测构建结果 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskPrepare_RFBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskPrepare_RFBP.cs index 1ac31e86..f9e434c6 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskPrepare_RFBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskPrepare_RFBP.cs @@ -16,19 +16,37 @@ namespace YooAsset.Editor // 检测基础构建参数 buildParametersContext.CheckBuildParameters(); - // 检测不被支持的参数 - if (buildParameters.EnableSharePackRule) - { - string message = BuildLogger.GetErrorMessage(ErrorCode.BuildPipelineNotSupportSharePackRule, $"{nameof(EBuildPipeline.RawFileBuildPipeline)} not support share pack rule !"); - throw new Exception(message); - } - // 检测不被支持的构建模式 if (buildParameters.BuildMode == EBuildMode.IncrementalBuild) { string message = BuildLogger.GetErrorMessage(ErrorCode.BuildPipelineNotSupportBuildMode, $"{nameof(EBuildPipeline.RawFileBuildPipeline)} not support {nameof(EBuildMode.IncrementalBuild)} build mode !"); throw new Exception(message); } + + // 强制构建删除包裹目录 + if (buildParameters.BuildMode == EBuildMode.ForceRebuild) + { + string packageRootDirectory = buildParameters.GetPackageRootDirectory(); + if (EditorTools.DeleteDirectory(packageRootDirectory)) + { + BuildLogger.Log($"Delete package root directory: {packageRootDirectory}"); + } + } + + // 检测包裹输出目录是否存在 + string packageOutputDirectory = buildParameters.GetPackageOutputDirectory(); + if (Directory.Exists(packageOutputDirectory)) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.PackageOutputDirectoryExists, $"Package outout directory exists: {packageOutputDirectory}"); + throw new Exception(message); + } + + // 如果输出目录不存在 + string pipelineOutputDirectory = buildParameters.GetPipelineOutputDirectory(); + if (EditorTools.CreateDirectory(pipelineOutputDirectory)) + { + BuildLogger.Log($"Create pipeline output directory: {pipelineOutputDirectory}"); + } } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_RFBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_RFBP.cs index ffc8571e..d68c14c8 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_RFBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_RFBP.cs @@ -15,18 +15,8 @@ namespace YooAsset.Editor protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context) { - var buildParametersContext = context.GetContextObject(); - var parameters = buildParametersContext.Parameters; - var buildMode = parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - { - return "00000000000000000000000000000000"; //32位 - } - else - { - string filePath = bundleInfo.PackageSourceFilePath; - return HashUtility.FileMD5(filePath); - } + string filePath = bundleInfo.PackageSourceFilePath; + return HashUtility.FileMD5(filePath); } protected override uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context) { @@ -35,29 +25,17 @@ namespace YooAsset.Editor protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return GetFilePathTempHash(filePath); - else - return HashUtility.FileMD5(filePath); + return HashUtility.FileMD5(filePath); } protected override string GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return "00000000"; //8位 - else - return HashUtility.FileCRC32(filePath); + return HashUtility.FileCRC32(filePath); } protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return GetBundleTempSize(bundleInfo); - else - return FileUtility.GetFileSize(filePath); + return FileUtility.GetFileSize(filePath); } } } \ No newline at end of file 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 2f084a9c..e7e32ab6 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs @@ -21,11 +21,6 @@ namespace YooAsset.Editor var buildMapContext = context.GetContextObject(); var scriptableBuildParameters = buildParametersContext.Parameters as ScriptableBuildParameters; - // 模拟构建模式下跳过引擎构建 - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return; - // 构建内容 var buildContent = new BundleBuildContent(buildMapContext.GetPipelineBuilds()); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreateManifest_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreateManifest_SBP.cs index df244ecf..9c3b9837 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreateManifest_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreateManifest_SBP.cs @@ -13,7 +13,7 @@ namespace YooAsset.Editor void IBuildTask.Run(BuildContext context) { - CreateManifestFile(context); + CreateManifestFile(true, true, context); } protected override string[] GetBundleDepends(BuildContext context, string bundleName) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreatePackage_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreatePackage_SBP.cs index 5fa6569e..77534131 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreatePackage_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreatePackage_SBP.cs @@ -9,17 +9,13 @@ namespace YooAsset.Editor { var buildParameters = context.GetContextObject(); var buildMapContext = context.GetContextObject(); - var buildMode = buildParameters.Parameters.BuildMode; - if (buildMode != EBuildMode.SimulateBuild) - { - CreatePackageCatalog(buildParameters, buildMapContext); - } + CreatePackagePatch(buildParameters, buildMapContext); } /// /// 拷贝补丁文件到补丁包目录 /// - private void CreatePackageCatalog(BuildParametersContext buildParametersContext, BuildMapContext buildMapContext) + private void CreatePackagePatch(BuildParametersContext buildParametersContext, BuildMapContext buildMapContext) { var scriptableBuildParameters = buildParametersContext.Parameters as ScriptableBuildParameters; string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory(); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreateReport_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreateReport_SBP.cs index 5c7c8be9..fa85aa48 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreateReport_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskCreateReport_SBP.cs @@ -13,12 +13,7 @@ namespace YooAsset.Editor var buildParameters = context.GetContextObject(); var buildMapContext = context.GetContextObject(); var manifestContext = context.GetContextObject(); - - var buildMode = buildParameters.Parameters.BuildMode; - if (buildMode != EBuildMode.SimulateBuild) - { - CreateReportFile(buildParameters, buildMapContext, manifestContext); - } + CreateReportFile(buildParameters, buildMapContext, manifestContext); } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskGetBuildMap_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskGetBuildMap_SBP.cs index 938f6070..6f118639 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskGetBuildMap_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskGetBuildMap_SBP.cs @@ -12,7 +12,7 @@ namespace YooAsset.Editor void IBuildTask.Run(BuildContext context) { var buildParametersContext = context.GetContextObject(); - var buildMapContext = CreateBuildMap(buildParametersContext.Parameters); + var buildMapContext = CreateBuildMap(false, buildParametersContext.Parameters); context.SetContextObject(buildMapContext); } } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskPrepare_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskPrepare_SBP.cs index 8d4ff541..b83fb77a 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskPrepare_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskPrepare_SBP.cs @@ -16,12 +16,34 @@ namespace YooAsset.Editor // 检测基础构建参数 buildParametersContext.CheckBuildParameters(); + // 检测是否有未保存场景 + if (EditorTools.HasDirtyScenes()) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.FoundUnsavedScene, "Found unsaved scene !"); + throw new Exception(message); + } + // 检测不被支持的构建模式 if (buildParameters.BuildMode == EBuildMode.ForceRebuild) { string message = BuildLogger.GetErrorMessage(ErrorCode.BuildPipelineNotSupportBuildMode, $"{nameof(EBuildPipeline.ScriptableBuildPipeline)} not support {nameof(EBuildMode.ForceRebuild)} build mode !"); throw new Exception(message); } + + // 检测包裹输出目录是否存在 + string packageOutputDirectory = buildParameters.GetPackageOutputDirectory(); + if (Directory.Exists(packageOutputDirectory)) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.PackageOutputDirectoryExists, $"Package outout directory exists: {packageOutputDirectory}"); + throw new Exception(message); + } + + // 如果输出目录不存在 + string pipelineOutputDirectory = buildParameters.GetPipelineOutputDirectory(); + if (EditorTools.CreateDirectory(pipelineOutputDirectory)) + { + BuildLogger.Log($"Create pipeline output directory: {pipelineOutputDirectory}"); + } } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskUpdateBundleInfo_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskUpdateBundleInfo_SBP.cs index 4cc48128..f94a716d 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskUpdateBundleInfo_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskUpdateBundleInfo_SBP.cs @@ -15,77 +15,45 @@ namespace YooAsset.Editor protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context) { - var buildParametersContext = context.GetContextObject(); - var parameters = buildParametersContext.Parameters; - var buildMode = parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) + // 注意:当资源包的依赖列表发生变化的时候,ContentHash也会发生变化! + var buildResult = context.GetContextObject(); + if (buildResult.Results.BundleInfos.TryGetValue(bundleInfo.BundleName, out var value)) { - return "00000000000000000000000000000000"; //32位 + return value.Hash.ToString(); } else { - // 注意:当资源包的依赖列表发生变化的时候,ContentHash也会发生变化! - var buildResult = context.GetContextObject(); - if (buildResult.Results.BundleInfos.TryGetValue(bundleInfo.BundleName, out var value)) - { - return value.Hash.ToString(); - } - else - { - string message = BuildLogger.GetErrorMessage(ErrorCode.NotFoundUnityBundleHash, $"Not found unity bundle hash : {bundleInfo.BundleName}"); - throw new Exception(message); - } + string message = BuildLogger.GetErrorMessage(ErrorCode.NotFoundUnityBundleHash, $"Not found unity bundle hash : {bundleInfo.BundleName}"); + throw new Exception(message); } } protected override uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context) { - var buildParametersContext = context.GetContextObject(); - var parameters = buildParametersContext.Parameters; - var buildMode = parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) + var buildResult = context.GetContextObject(); + if (buildResult.Results.BundleInfos.TryGetValue(bundleInfo.BundleName, out var value)) { - return 0; + return value.Crc; } else { - var buildResult = context.GetContextObject(); - if (buildResult.Results.BundleInfos.TryGetValue(bundleInfo.BundleName, out var value)) - { - return value.Crc; - } - else - { - string message = BuildLogger.GetErrorMessage(ErrorCode.NotFoundUnityBundleCRC, $"Not found unity bundle crc : {bundleInfo.BundleName}"); - throw new Exception(message); - } + string message = BuildLogger.GetErrorMessage(ErrorCode.NotFoundUnityBundleCRC, $"Not found unity bundle crc : {bundleInfo.BundleName}"); + throw new Exception(message); } } protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return GetFilePathTempHash(filePath); - else - return HashUtility.FileMD5(filePath); + return HashUtility.FileMD5(filePath); } protected override string GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return "00000000"; //8位 - else - return HashUtility.FileCRC32(filePath); + return HashUtility.FileCRC32(filePath); } protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) { string filePath = bundleInfo.PackageSourceFilePath; - var buildMode = buildParametersContext.Parameters.BuildMode; - if (buildMode == EBuildMode.SimulateBuild) - return GetBundleTempSize(bundleInfo); - else - return FileUtility.GetFileSize(filePath); + return FileUtility.GetFileSize(filePath); } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskVerifyBuildResult_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskVerifyBuildResult_SBP.cs index 7b2066df..8fda913a 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskVerifyBuildResult_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskVerifyBuildResult_SBP.cs @@ -16,10 +16,6 @@ namespace YooAsset.Editor var buildParametersContext = context.GetContextObject(); var buildParameters = buildParametersContext.Parameters as ScriptableBuildParameters; - // 模拟构建模式下跳过验证 - if (buildParameters.BuildMode == EBuildMode.SimulateBuild) - return; - // 验证构建结果 if (buildParameters.VerifyBuildingResult) { diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/ErrorCode.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/ErrorCode.cs index ec5c3e93..fc74d595 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/ErrorCode.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/ErrorCode.cs @@ -14,7 +14,6 @@ namespace YooAsset.Editor PackageOutputDirectoryExists = 115, RecommendScriptBuildPipeline = 130, BuildPipelineNotSupportBuildMode = 140, - BuildPipelineNotSupportSharePackRule = 141, // TaskGetBuildMap RemoveInvalidTags = 200, diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/EBuildMode.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/EBuildMode.cs index c483f4b2..0fcfaa7d 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/EBuildMode.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/EBuildMode.cs @@ -15,10 +15,5 @@ namespace YooAsset.Editor /// 增量构建模式 /// IncrementalBuild, - - /// - /// 模拟构建模式 - /// - SimulateBuild, } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/EBuildPipeline.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/EBuildPipeline.cs index 85f33c02..01a70d02 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/EBuildPipeline.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/EBuildPipeline.cs @@ -6,6 +6,11 @@ namespace YooAsset.Editor /// public enum EBuildPipeline { + /// + /// 编辑器下的模拟构建管线(ESBP) + /// + EditorSimulateBuildPipeline, + /// /// 传统内置构建管线 (BBP) /// diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipelineViewer.cs index 937df593..4dc3654b 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipelineViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipelineViewer.cs @@ -55,7 +55,6 @@ namespace YooAsset.Editor List buildModeList = new List(); buildModeList.Add(EBuildMode.ForceRebuild); buildModeList.Add(EBuildMode.IncrementalBuild); - buildModeList.Add(EBuildMode.SimulateBuild); return buildModeList; } } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs new file mode 100644 index 00000000..0bda5b69 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs @@ -0,0 +1,72 @@ +#if UNITY_2019_4_OR_NEWER +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace YooAsset.Editor +{ + internal class EditorSimulateBuildPipelineViewer : BuildPipelineViewerBase + { + public EditorSimulateBuildPipelineViewer(string packageName, BuildTarget buildTarget, VisualElement parent) + : base(packageName, EBuildPipeline.RawFileBuildPipeline, buildTarget, parent) + { + var compressionField = Root.Q("Compression"); + UIElementsTools.SetElementVisible(compressionField, false); + + var encryptionContainer = Root.Q("EncryptionContainer"); + UIElementsTools.SetElementVisible(encryptionContainer, false); + + var fileNameStyleField = Root.Q("FileNameStyle"); + UIElementsTools.SetElementVisible(fileNameStyleField, false); + + var copyBuildinFileOptionField = Root.Q("CopyBuildinFileOption"); + UIElementsTools.SetElementVisible(copyBuildinFileOptionField, false); + + var CopyBuildinFileParamField = Root.Q("CopyBuildinFileParam"); + UIElementsTools.SetElementVisible(CopyBuildinFileParamField, false); + } + + /// + /// 执行构建 + /// + protected override void ExecuteBuild() + { + var buildMode = AssetBundleBuilderSetting.GetPackageBuildMode(PackageName, BuildPipeline); + var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, BuildPipeline); + var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(PackageName, BuildPipeline); + var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(PackageName, BuildPipeline); + + EditorSimulateBuildParameters buildParameters = new EditorSimulateBuildParameters(); + buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); + buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); + buildParameters.BuildPipeline = BuildPipeline.ToString(); + buildParameters.BuildTarget = BuildTarget; + buildParameters.BuildMode = buildMode; + buildParameters.PackageName = PackageName; + buildParameters.PackageVersion = GetPackageVersion(); + buildParameters.VerifyBuildingResult = true; + buildParameters.FileNameStyle = fileNameStyle; + buildParameters.BuildinFileCopyOption = buildinFileCopyOption; + buildParameters.BuildinFileCopyParams = buildinFileCopyParams; + buildParameters.EncryptionServices = CreateEncryptionInstance(); + + EditorSimulateBuildPipeline pipeline = new EditorSimulateBuildPipeline(); + var buildResult = pipeline.Run(buildParameters, true); + if (buildResult.Success) + EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory); + } + + protected override List GetSupportBuildModes() + { + List buildModeList = new List(); + buildModeList.Add(EBuildMode.ForceRebuild); + return buildModeList; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs.meta new file mode 100644 index 00000000..e9538a8e --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipelineViewer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01e426f05b237b340881910d779e4c2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipelineViewer.cs index 063869f3..f042a502 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipelineViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipelineViewer.cs @@ -53,7 +53,6 @@ namespace YooAsset.Editor { List buildModeList = new List(); buildModeList.Add(EBuildMode.ForceRebuild); - buildModeList.Add(EBuildMode.SimulateBuild); return buildModeList; } } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs index 3f878733..4ff5ac48 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs @@ -54,7 +54,6 @@ namespace YooAsset.Editor { List buildModeList = new List(); buildModeList.Add(EBuildMode.IncrementalBuild); - buildModeList.Add(EBuildMode.SimulateBuild); return buildModeList; } } diff --git a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollector.cs b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollector.cs index 87374888..f3c8c03a 100644 --- a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollector.cs +++ b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollector.cs @@ -140,7 +140,7 @@ namespace YooAsset.Editor public List GetAllCollectAssets(CollectCommand command, AssetBundleCollectorGroup group) { // 注意:模拟构建模式下只收集主资源 - if (command.BuildMode == EBuildMode.SimulateBuild) + if (command.SimulateBuild) { if (CollectorType != ECollectorType.MainAssetCollector) return new List(); @@ -220,7 +220,7 @@ namespace YooAsset.Editor CollectAssetInfo collectAssetInfo = new CollectAssetInfo(CollectorType, bundleName, address, assetInfo, assetTags); // 注意:模拟构建模式下不需要收集依赖资源 - if (command.BuildMode == EBuildMode.SimulateBuild) + if (command.SimulateBuild) collectAssetInfo.DependAssets = new List(); else collectAssetInfo.DependAssets = GetAllDependencies(command, assetInfo.AssetPath); diff --git a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorSetting.cs b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorSetting.cs index 2e468223..5f9440b6 100644 --- a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorSetting.cs +++ b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorSetting.cs @@ -89,7 +89,7 @@ namespace YooAsset.Editor /// /// 获取包裹收集的资源文件 /// - public CollectResult GetPackageAssets(EBuildMode buildMode, string packageName) + public CollectResult GetPackageAssets(bool simulateBuild, string packageName) { if (string.IsNullOrEmpty(packageName)) throw new Exception("Build package name is null or empty !"); @@ -100,7 +100,7 @@ namespace YooAsset.Editor // 创建资源收集命令 IIgnoreRule ignoreRule = AssetBundleCollectorSettingData.GetIgnoreRuleInstance(package.IgnoreRuleName); - CollectCommand command = new CollectCommand(buildMode, packageName, + CollectCommand command = new CollectCommand(simulateBuild, packageName, package.EnableAddressable, package.LocationToLower, package.IncludeAssetGUID, diff --git a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorWindow.cs b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorWindow.cs index f4691727..2b2b073b 100644 --- a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorWindow.cs +++ b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorWindow.cs @@ -42,7 +42,7 @@ namespace YooAsset.Editor private Toggle _includeAssetGUIDToogle; private Toggle _autoCollectShadersToogle; private PopupField _ignoreRulePopupField; - + private VisualElement _packageContainer; private ListView _packageListView; private TextField _packageNameTxt; @@ -172,10 +172,10 @@ namespace YooAsset.Editor _ignoreRulePopupField.style.width = 300; _ignoreRulePopupField.formatListItemCallback = FormatListItemCallback; _ignoreRulePopupField.formatSelectedValueCallback = FormatSelectedValueCallback; - _ignoreRulePopupField.RegisterValueChangedCallback(evt => + _ignoreRulePopupField.RegisterValueChangedCallback(evt => { var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage; - if(selectPackage != null) + if (selectPackage != null) { selectPackage.IgnoreRuleName = evt.newValue.ClassName; AssetBundleCollectorSettingData.ModifyPackage(selectPackage); @@ -991,7 +991,7 @@ namespace YooAsset.Editor try { IIgnoreRule ignoreRule = AssetBundleCollectorSettingData.GetIgnoreRuleInstance(_ignoreRulePopupField.value.ClassName); - CollectCommand command = new CollectCommand(EBuildMode.SimulateBuild, + CollectCommand command = new CollectCommand(true, _packageNameTxt.value, _enableAddressableToogle.value, _locationToLowerToogle.value, diff --git a/Assets/YooAsset/Editor/AssetBundleCollector/CollectCommand.cs b/Assets/YooAsset/Editor/AssetBundleCollector/CollectCommand.cs index dd2a206f..483f9e81 100644 --- a/Assets/YooAsset/Editor/AssetBundleCollector/CollectCommand.cs +++ b/Assets/YooAsset/Editor/AssetBundleCollector/CollectCommand.cs @@ -4,9 +4,9 @@ namespace YooAsset.Editor public class CollectCommand { /// - /// 构建模式 + /// 模拟构建模式 /// - public EBuildMode BuildMode { private set; get; } + public bool SimulateBuild { private set; get; } /// /// 包裹名称 @@ -49,11 +49,11 @@ namespace YooAsset.Editor public IIgnoreRule IgnoreRule { private set; get; } - public CollectCommand(EBuildMode buildMode, string packageName, + public CollectCommand(bool simulateBuild, string packageName, bool enableAddressable, bool locationToLower, bool includeAssetGUID, bool autoCollectShaders, bool uniqueBundleName, IIgnoreRule ignoreRule) { - BuildMode = buildMode; + SimulateBuild = simulateBuild; PackageName = packageName; EnableAddressable = enableAddressable; LocationToLower = locationToLower;