From dfa9ff69545cf1afd954fbb265389f01acb44425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= <33317070@qq.com> Date: Mon, 11 May 2026 15:31:46 +0800 Subject: [PATCH] feat : Archive file build pipeline --- .../ArchiveFileBuildPipeline.meta} | 2 +- .../ArchiveFileBuildHelper.cs | 112 ++++++++++++ .../ArchiveFileBuildHelper.cs.meta | 11 ++ .../ArchiveFileBuildParameters.cs | 46 +++++ .../ArchiveFileBuildParameters.cs.meta | 11 ++ .../ArchiveFileBuildPipeline.cs | 48 +++++ .../ArchiveFileBuildPipeline.cs.meta | 11 ++ .../ArchiveFileEntry.cs | 61 +++++++ .../ArchiveFileEntry.cs.meta | 11 ++ .../ArchiveFileBuildPipeline/BuildTasks.meta | 8 + .../BuildTasks/TaskBuilding_AFBP.cs | 29 +++ .../BuildTasks/TaskBuilding_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskCopyBundledFiles_AFBP.cs | 23 +++ .../TaskCopyBundledFiles_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskCreateCatalog_AFBP.cs | 21 +++ .../BuildTasks/TaskCreateCatalog_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskCreateManifest_AFBP.cs | 21 +++ .../TaskCreateManifest_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskCreatePackage_AFBP.cs | 23 +++ .../BuildTasks/TaskCreatePackage_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskCreateReport_AFBP.cs | 23 +++ .../BuildTasks/TaskCreateReport_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskEncryption_AFBP.cs | 17 ++ .../BuildTasks/TaskEncryption_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskGetBuildMap_AFBP.cs | 17 ++ .../BuildTasks/TaskGetBuildMap_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskPrepare_AFBP.cs | 31 ++++ .../BuildTasks/TaskPrepare_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskUpdateBundleInfo_AFBP.cs | 51 ++++++ .../TaskUpdateBundleInfo_AFBP.cs.meta | 11 ++ .../BuildTasks/TaskGetBuildMap_ESBP.cs | 12 +- .../BuildTasks/TaskPrepare_ESBP.cs | 1 - .../EditorSimulateBuildParameters.cs | 14 ++ .../BuildTasks/TaskPrepare_LBP.cs | 1 - .../LegacyBuildParameters.cs | 1 - .../BuildTasks/TaskCopyBundledFiles_RFBP.cs | 3 - .../BuildTasks/TaskCreatePackage_RFBP.cs | 2 - .../BuildTasks/TaskPrepare_RFBP.cs | 4 +- .../BuildTasks/TaskUpdateBundleInfo_RFBP.cs | 44 ++--- .../RawFileBuildParameters.cs | 3 - .../BuildTasks/TaskPrepare_SBP.cs | 10 +- .../ScriptableBuildParameters.cs | 11 ++ .../BundleBuilder/BuildSystem/ErrorCode.cs | 10 ++ .../BaseTasks.meta => BuildTasks.meta} | 0 .../TaskCopyBundledFiles.cs | 0 .../TaskCopyBundledFiles.cs.meta | 0 .../TaskCreateCatalog.cs | 0 .../TaskCreateCatalog.cs.meta | 0 .../TaskCreateManifest.cs | 0 .../TaskCreateManifest.cs.meta | 0 .../TaskCreatePackage.cs | 0 .../TaskCreatePackage.cs.meta | 0 .../TaskCreateReport.cs | 0 .../TaskCreateReport.cs.meta | 0 .../TaskEncryption.cs | 0 .../TaskEncryption.cs.meta | 0 .../TaskGetBuildMap.cs | 22 +++ .../TaskGetBuildMap.cs.meta | 0 .../BaseTasks => BuildTasks}/TaskPrepare.cs | 0 .../TaskPrepare.cs.meta | 0 .../TaskUpdateBundleInfo.cs | 11 ++ .../TaskUpdateBundleInfo.cs.meta | 0 .../BundleBuilder/BundleSimulateBuilder.cs | 4 +- .../Editor/BundleBuilder/EBuildPipeline.cs | 5 + .../ArchiveFileBuildPipeline.meta | 8 + .../ArchiveFileBuildPipelineViewer.cs | 166 ++++++++++++++++++ .../ArchiveFileBuildPipelineViewer.cs.meta | 11 ++ .../ArchiveFileBuildPipelineViewer.uxml | 14 ++ .../ArchiveFileBuildPipelineViewer.uxml.meta | 10 ++ .../EditorSimulateBuildPipelineViewer.cs | 2 +- .../Common/LoadLocalArchiveBundleOperation.cs | 99 +++++++++++ .../LoadLocalArchiveBundleOperation.cs.meta | 11 ++ .../Common/LoadLocalArchiveBundleOptions.cs | 31 ++++ .../LoadLocalArchiveBundleOptions.cs.meta | 11 ++ .../BuiltinBundleCache/BuiltinBundleCache.cs | 5 + .../BBCLoadArchiveBundleOperation.cs | 97 ++++++++++ .../BBCLoadArchiveBundleOperation.cs.meta | 11 ++ ...tion.cs => BBCLoadAssetBundleOperation.cs} | 90 ---------- ...ta => BBCLoadAssetBundleOperation.cs.meta} | 0 .../Operations/BBCLoadRawBundleOperation.cs | 93 ++++++++++ .../BBCLoadRawBundleOperation.cs.meta | 11 ++ .../EditorBundleCache/EditorBundleCache.cs | 13 +- ...ation.cs => EBCLoadBundleBaseOperation.cs} | 60 +------ ...eta => EBCLoadBundleBaseOperation.cs.meta} | 0 .../EBCLoadVirtualArchiveBundleOperation.cs | 35 ++++ ...CLoadVirtualArchiveBundleOperation.cs.meta | 11 ++ .../EBCLoadVirtualAssetBundleOperation.cs | 27 +++ ...EBCLoadVirtualAssetBundleOperation.cs.meta | 11 ++ .../EBCLoadVirtualRawBundleOperation.cs | 38 ++++ .../EBCLoadVirtualRawBundleOperation.cs.meta | 11 ++ .../SBCLoadArchiveBundleOperation.cs | 98 +++++++++++ .../SBCLoadArchiveBundleOperation.cs.meta | 11 ++ ...tion.cs => SBCLoadAssetBundleOperation.cs} | 118 ------------- ...ta => SBCLoadAssetBundleOperation.cs.meta} | 0 .../Operations/SBCLoadRawBundleOperation.cs | 102 +++++++++++ .../SBCLoadRawBundleOperation.cs.meta | 11 ++ .../SandboxBundleCache/SandboxBundleCache.cs | 5 + ...ion.cs => WGBCLoadAssetBundleOperation.cs} | 0 ...a => WGBCLoadAssetBundleOperation.cs.meta} | 0 ...ion.cs => WRBCLoadAssetBundleOperation.cs} | 0 ...a => WRBCLoadAssetBundleOperation.cs.meta} | 0 ...ion.cs => WSBCLoadAssetBundleOperation.cs} | 0 ...a => WSBCLoadAssetBundleOperation.cs.meta} | 0 .../Runtime/BundleHandle/EBundleType.cs | 30 +++- .../Services/ArchiveBundleHandle.meta | 8 + .../ArchiveBundleHandle/ArchiveBundle.cs | 140 +++++++++++++++ .../ArchiveBundleHandle/ArchiveBundle.cs.meta | 11 ++ .../ArchiveBundleConsts.cs | 37 ++++ .../ArchiveBundleConsts.cs.meta | 11 ++ .../ArchiveBundleHandle.cs | 70 ++++++++ .../ArchiveBundleHandle.cs.meta | 11 ++ .../ArchiveBundleHelper.cs | 74 ++++++++ .../ArchiveBundleHelper.cs.meta | 11 ++ .../ArchiveBundleHandle/Operations.meta | 8 + .../Operations/ARBHLoadAllAssetsOperation.cs | 17 ++ .../ARBHLoadAllAssetsOperation.cs.meta | 11 ++ .../Operations/ARBHLoadAssetOperation.cs | 80 +++++++++ .../Operations/ARBHLoadAssetOperation.cs.meta | 11 ++ .../Operations/ARBHLoadSceneOperation.cs | 20 +++ .../Operations/ARBHLoadSceneOperation.cs.meta | 11 ++ .../Operations/ARBHLoadSubAssetsOperation.cs | 17 ++ .../ARBHLoadSubAssetsOperation.cs.meta | 11 ++ .../Services/RawBundleHandle/RawBundle.cs | 9 +- .../Services/VirtualArchiveBundleHandle.meta | 8 + .../Operations.meta | 8 + .../Operations/VARBHLoadAllAssetsOperation.cs | 17 ++ .../VARBHLoadAllAssetsOperation.cs.meta | 11 ++ .../Operations/VARBHLoadAssetOperation.cs | 73 ++++++++ .../VARBHLoadAssetOperation.cs.meta | 11 ++ .../Operations/VARBHLoadSceneOperation.cs | 20 +++ .../VARBHLoadSceneOperation.cs.meta | 11 ++ .../Operations/VARBHLoadSubAssetsOperation.cs | 17 ++ .../VARBHLoadSubAssetsOperation.cs.meta | 11 ++ .../VirtualArchiveBundle.cs | 67 +++++++ .../VirtualArchiveBundle.cs.meta | 11 ++ .../VirtualArchiveBundleHandle.cs | 70 ++++++++ .../VirtualArchiveBundleHandle.cs.meta | 11 ++ .../Services/VirtualAssetBundleHandle.meta | 8 + .../Operations.meta | 0 .../Operations/VABHLoadAllAssetsOperation.cs} | 6 +- .../VABHLoadAllAssetsOperation.cs.meta} | 0 .../Operations/VABHLoadAssetOperation.cs} | 6 +- .../VABHLoadAssetOperation.cs.meta} | 0 .../Operations/VABHLoadSceneOperation.cs} | 6 +- .../VABHLoadSceneOperation.cs.meta} | 0 .../Operations/VABHLoadSubAssetsOperation.cs} | 6 +- .../VABHLoadSubAssetsOperation.cs.meta} | 0 .../VirtualAssetBundleHandle.cs} | 17 +- .../VirtualAssetBundleHandle.cs.meta} | 0 .../Services/VirtualRawBundleHandle.meta | 8 + .../VirtualRawBundleHandle.cs | 67 +++++++ .../VirtualRawBundleHandle.cs.meta | 11 ++ .../BuiltinFileSystem/BuiltinFileSystem.cs | 3 + .../FsmNode/FsmInitializePackage.cs | 2 +- .../Test Sample/Editor/TestPackageBuilder.cs | 40 +++++ .../Runtime/CommonTests/TestDestroyPackage.cs | 16 +- .../CommonTests/TestLoadArchiveBundle.cs | 107 +++++++++++ .../CommonTests/TestLoadArchiveBundle.cs.meta | 11 ++ .../T0_InitYooAssets/T0_InitYooAssets.cs | 18 ++ .../T1_TestEditorFileSystem.cs | 66 ++++++- .../T2_TestBuiltinFileSystem.cs | 63 ++++++- .../Test Sample/Runtime/TestConsts.cs | 5 + 162 files changed, 3101 insertions(+), 375 deletions(-) rename Assets/YooAsset/{Runtime/BundleHandle/Services/VirtualBundleHandle.meta => Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline.meta} (77%) create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildHelper.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildHelper.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildParameters.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildParameters.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildPipeline.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildPipeline.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileEntry.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileEntry.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskBuilding_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskBuilding_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateCatalog_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateCatalog_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateManifest_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateManifest_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreatePackage_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreatePackage_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateReport_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateReport_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskEncryption_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskEncryption_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskGetBuildMap_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskGetBuildMap_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskPrepare_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskPrepare_AFBP.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_AFBP.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_AFBP.cs.meta rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks.meta => BuildTasks.meta} (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCopyBundledFiles.cs (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCopyBundledFiles.cs.meta (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCreateCatalog.cs (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCreateCatalog.cs.meta (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCreateManifest.cs (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCreateManifest.cs.meta (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCreatePackage.cs (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCreatePackage.cs.meta (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCreateReport.cs (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskCreateReport.cs.meta (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskEncryption.cs (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskEncryption.cs.meta (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskGetBuildMap.cs (92%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskGetBuildMap.cs.meta (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskPrepare.cs (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskPrepare.cs.meta (100%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskUpdateBundleInfo.cs (92%) rename Assets/YooAsset/Editor/BundleBuilder/{BuildPipeline/BaseTasks => BuildTasks}/TaskUpdateBundleInfo.cs.meta (100%) create mode 100644 Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline/ArchiveFileBuildPipelineViewer.cs create mode 100644 Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline/ArchiveFileBuildPipelineViewer.cs.meta create mode 100644 Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline/ArchiveFileBuildPipelineViewer.uxml create mode 100644 Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline/ArchiveFileBuildPipelineViewer.uxml.meta create mode 100644 Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalArchiveBundleOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalArchiveBundleOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalArchiveBundleOptions.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalArchiveBundleOptions.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/BuiltinBundleCache/Operations/BBCLoadArchiveBundleOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/BuiltinBundleCache/Operations/BBCLoadArchiveBundleOperation.cs.meta rename Assets/YooAsset/Runtime/BundleCache/Services/BuiltinBundleCache/Operations/{BBCLoadBundleOperation.cs => BBCLoadAssetBundleOperation.cs} (52%) rename Assets/YooAsset/Runtime/BundleCache/Services/BuiltinBundleCache/Operations/{BBCLoadBundleOperation.cs.meta => BBCLoadAssetBundleOperation.cs.meta} (100%) create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/BuiltinBundleCache/Operations/BBCLoadRawBundleOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/BuiltinBundleCache/Operations/BBCLoadRawBundleOperation.cs.meta rename Assets/YooAsset/Runtime/BundleCache/Services/EditorBundleCache/Operations/{EBCLoadBundleOperation.cs => EBCLoadBundleBaseOperation.cs} (58%) rename Assets/YooAsset/Runtime/BundleCache/Services/EditorBundleCache/Operations/{EBCLoadBundleOperation.cs.meta => EBCLoadBundleBaseOperation.cs.meta} (100%) create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/EditorBundleCache/Operations/EBCLoadVirtualArchiveBundleOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/EditorBundleCache/Operations/EBCLoadVirtualArchiveBundleOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/EditorBundleCache/Operations/EBCLoadVirtualAssetBundleOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/EditorBundleCache/Operations/EBCLoadVirtualAssetBundleOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/EditorBundleCache/Operations/EBCLoadVirtualRawBundleOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/EditorBundleCache/Operations/EBCLoadVirtualRawBundleOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/SandboxBundleCache/Operations/SBCLoadArchiveBundleOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/SandboxBundleCache/Operations/SBCLoadArchiveBundleOperation.cs.meta rename Assets/YooAsset/Runtime/BundleCache/Services/SandboxBundleCache/Operations/{SBCLoadBundleOperation.cs => SBCLoadAssetBundleOperation.cs} (66%) rename Assets/YooAsset/Runtime/BundleCache/Services/SandboxBundleCache/Operations/{SBCLoadBundleOperation.cs.meta => SBCLoadAssetBundleOperation.cs.meta} (100%) create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/SandboxBundleCache/Operations/SBCLoadRawBundleOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleCache/Services/SandboxBundleCache/Operations/SBCLoadRawBundleOperation.cs.meta rename Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/{WGBCLoadBundleOperation.cs => WGBCLoadAssetBundleOperation.cs} (100%) rename Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/{WGBCLoadBundleOperation.cs.meta => WGBCLoadAssetBundleOperation.cs.meta} (100%) rename Assets/YooAsset/Runtime/BundleCache/Services/WebRemoteBundleCache/Operations/{WRBCLoadBundleOperation.cs => WRBCLoadAssetBundleOperation.cs} (100%) rename Assets/YooAsset/Runtime/BundleCache/Services/WebRemoteBundleCache/Operations/{WRBCLoadBundleOperation.cs.meta => WRBCLoadAssetBundleOperation.cs.meta} (100%) rename Assets/YooAsset/Runtime/BundleCache/Services/WebServerBundleCache/Operations/{WSBCLoadBundleOperation.cs => WSBCLoadAssetBundleOperation.cs} (100%) rename Assets/YooAsset/Runtime/BundleCache/Services/WebServerBundleCache/Operations/{WSBCLoadBundleOperation.cs.meta => WSBCLoadAssetBundleOperation.cs.meta} (100%) create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/ArchiveBundle.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/ArchiveBundle.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/ArchiveBundleConsts.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/ArchiveBundleConsts.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/ArchiveBundleHandle.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/ArchiveBundleHandle.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/ArchiveBundleHelper.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/ArchiveBundleHelper.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations/ARBHLoadAllAssetsOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations/ARBHLoadAllAssetsOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations/ARBHLoadAssetOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations/ARBHLoadAssetOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations/ARBHLoadSceneOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations/ARBHLoadSceneOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations/ARBHLoadSubAssetsOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/ArchiveBundleHandle/Operations/ARBHLoadSubAssetsOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations/VARBHLoadAllAssetsOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations/VARBHLoadAllAssetsOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations/VARBHLoadAssetOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations/VARBHLoadAssetOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations/VARBHLoadSceneOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations/VARBHLoadSceneOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations/VARBHLoadSubAssetsOperation.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/Operations/VARBHLoadSubAssetsOperation.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/VirtualArchiveBundle.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/VirtualArchiveBundle.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/VirtualArchiveBundleHandle.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualArchiveBundleHandle/VirtualArchiveBundleHandle.cs.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualAssetBundleHandle.meta rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle => VirtualAssetBundleHandle}/Operations.meta (100%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/Operations/VBHLoadAllAssetsOperation.cs => VirtualAssetBundleHandle/Operations/VABHLoadAllAssetsOperation.cs} (93%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/Operations/VBHLoadAllAssetsOperation.cs.meta => VirtualAssetBundleHandle/Operations/VABHLoadAllAssetsOperation.cs.meta} (100%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/Operations/VBHLoadAssetOperation.cs => VirtualAssetBundleHandle/Operations/VABHLoadAssetOperation.cs} (91%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/Operations/VBHLoadAssetOperation.cs.meta => VirtualAssetBundleHandle/Operations/VABHLoadAssetOperation.cs.meta} (100%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/Operations/VBHLoadSceneOperation.cs => VirtualAssetBundleHandle/Operations/VABHLoadSceneOperation.cs} (93%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/Operations/VBHLoadSceneOperation.cs.meta => VirtualAssetBundleHandle/Operations/VABHLoadSceneOperation.cs.meta} (100%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/Operations/VBHLoadSubAssetsOperation.cs => VirtualAssetBundleHandle/Operations/VABHLoadSubAssetsOperation.cs} (92%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/Operations/VBHLoadSubAssetsOperation.cs.meta => VirtualAssetBundleHandle/Operations/VABHLoadSubAssetsOperation.cs.meta} (100%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/VirtualBundleHandle.cs => VirtualAssetBundleHandle/VirtualAssetBundleHandle.cs} (68%) rename Assets/YooAsset/Runtime/BundleHandle/Services/{VirtualBundleHandle/VirtualBundleHandle.cs.meta => VirtualAssetBundleHandle/VirtualAssetBundleHandle.cs.meta} (100%) create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualRawBundleHandle.meta create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualRawBundleHandle/VirtualRawBundleHandle.cs create mode 100644 Assets/YooAsset/Runtime/BundleHandle/Services/VirtualRawBundleHandle/VirtualRawBundleHandle.cs.meta create mode 100644 Assets/YooAsset/Samples~/Test Sample/Runtime/CommonTests/TestLoadArchiveBundle.cs create mode 100644 Assets/YooAsset/Samples~/Test Sample/Runtime/CommonTests/TestLoadArchiveBundle.cs.meta diff --git a/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline.meta similarity index 77% rename from Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline.meta index 0efc28fc..c77629e6 100644 --- a/Assets/YooAsset/Runtime/BundleHandle/Services/VirtualBundleHandle.meta +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2e49e0ae672b9944783571b2ad737df9 +guid: da26c791ca572fe4a818405173661568 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildHelper.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildHelper.cs new file mode 100644 index 00000000..bbb12c62 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildHelper.cs @@ -0,0 +1,112 @@ +using System; +using System.IO; +using System.Collections.Generic; + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建辅助工具类 + /// + internal static class ArchiveFileBuildHelper + { + private const int StreamCopyBufferSize = 81920; + + /// + /// 收集构建资源的归档条目列表,并按 FilePath 字典序排序 + /// + public static List CollectEntries(IReadOnlyList allAssets) + { + var entries = new List(allAssets.Count); + foreach (var asset in allAssets) + { + string assetPath = asset.AssetInfo.AssetPath; + long dataLength = new FileInfo(assetPath).Length; + uint crc = HashUtility.ComputeFileCrc32AsUInt(assetPath); + entries.Add(new ArchiveFileEntry(assetPath, dataLength, crc)); + } + + entries.Sort((a, b) => string.Compare(a.AssetPath, b.AssetPath, StringComparison.Ordinal)); + return entries; + } + + /// + /// 计算每个条目的绝对偏移,并写入归档文件 + /// + /// 输出文件路径 + /// 归档条目列表 + /// 文件数据对齐字节数(0 表示不对齐) + public static void BuildArchiveFile(string outputPath, List entries, int fileAlignment) + { + int fileCount = entries.Count; + if (fileCount > ArchiveBundleConsts.MaxChildFileCount) + throw new InvalidOperationException($"Archive child file count {fileCount} exceeds maximum ({ArchiveBundleConsts.MaxChildFileCount})."); + + // 1. 计算 header 总大小 + int headerSize = 4 + 4 + 4; // Magic + Version + FileCount + foreach (var entry in entries) + { + byte[] pathBytes = entry.GetPathBytes(); + // FilePathLen(4) + FilePath(变长) + DataOffset(8) + DataLength(8) + FileCRC(4) + headerSize += 4 + pathBytes.Length + 8 + 8 + 4; + } + + // 2. 计算每个文件的绝对偏移 + long currentOffset = headerSize; + foreach (var entry in entries) + { + if (fileAlignment > 0) + currentOffset = AlignOffset(currentOffset, fileAlignment); + entry.DataOffset = currentOffset; + currentOffset += entry.DataLength; + } + + // 3. 写入归档文件 + EditorFileUtility.CreateFileDirectory(outputPath); + using (var fs = new FileStream(outputPath, FileMode.Create, FileAccess.Write)) + using (var writer = new BinaryWriter(fs)) + { + // Header + writer.Write(ArchiveBundleConsts.FileMagic); + writer.Write(ArchiveBundleConsts.FileVersion); + writer.Write(fileCount); + + foreach (var entry in entries) + { + byte[] pathBytes = entry.GetPathBytes(); + writer.Write(pathBytes.Length); + writer.Write(pathBytes); + writer.Write(entry.DataOffset); + writer.Write(entry.DataLength); + writer.Write(entry.FileCRC); + } + + // Data: 按排序后的顺序写入,使用流式拷贝避免大文件 OOM + byte[] buffer = new byte[StreamCopyBufferSize]; + foreach (var entry in entries) + { + // 填充对齐字节 + long paddingSize = entry.DataOffset - fs.Position; + if (paddingSize > 0) + writer.Write(new byte[paddingSize]); + + using (var sourceStream = new FileStream(entry.AssetPath, FileMode.Open, FileAccess.Read)) + { + int bytesRead; + while ((bytesRead = sourceStream.Read(buffer, 0, buffer.Length)) > 0) + { + writer.Write(buffer, 0, bytesRead); + } + } + } + } + } + + /// + /// 将偏移值向上对齐到指定字节边界 + /// + private static long AlignOffset(long offset, int alignment) + { + return (offset + alignment - 1) / alignment * alignment; + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildHelper.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildHelper.cs.meta new file mode 100644 index 00000000..bc02fbf0 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f8daa3aacb5da8458fc073431da1891 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildParameters.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildParameters.cs new file mode 100644 index 00000000..435a013f --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildParameters.cs @@ -0,0 +1,46 @@ +using System; + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的构建参数 + /// + public class ArchiveFileBuildParameters : BuildParameters + { + private const int MaxFileAlignment = 4096; + + /// + /// 文件哈希值计算包含路径信息 + /// + public bool IncludePathInHash { get; set; } = false; + + /// + /// 归档文件内数据对齐字节数(0 表示不对齐) + /// + /// + /// 对齐后每个子文件的数据偏移会向上取整到该值的整数倍,文件间以零字节填充。 + /// 推荐值:4(通用对齐)、512(磁盘扇区对齐)、4096(内存页对齐)。 + /// + public int FileAlignment { get; set; } = 0; + + + /// + protected override void CheckBuildParametersCore() + { + // ArchiveBundle 不支持资源包加密 + if (BundleEncryptor != null) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.BundleEncryptionNotSupported, + $"ArchiveFileBuildPipeline does not support bundle encryption. Please remove the BundleEncryptor configuration."); + throw new NotSupportedException(message); + } + + // 校验文件对齐参数范围 + if (FileAlignment < 0 || FileAlignment > MaxFileAlignment) + { + throw new ArgumentOutOfRangeException(nameof(FileAlignment), + $"FileAlignment must be between 0 and {MaxFileAlignment}. Current value: {FileAlignment}."); + } + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildParameters.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildParameters.cs.meta new file mode 100644 index 00000000..a756bc07 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83bdf0f6502d23f49ae900d98f459c7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildPipeline.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildPipeline.cs new file mode 100644 index 00000000..dde528b4 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildPipeline.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线,将同一 BundleName 下的多个原始文件合并写入一个归档文件 + /// + public class ArchiveFileBuildPipeline : IBuildPipeline + { + /// + /// 执行构建流程 + /// + public BuildResult Run(BuildParameters buildParameters, bool enableLog) + { + if (buildParameters is ArchiveFileBuildParameters) + { + BundleBuilder builder = new BundleBuilder(); + return builder.Run(buildParameters, GetDefaultBuildPipeline(), enableLog); + } + else + { + throw new ArgumentException($"Invalid build parameter type: '{buildParameters.GetType().Name}'.", nameof(buildParameters)); + } + } + + /// + /// 获取默认的构建流程 + /// + private List GetDefaultBuildPipeline() + { + List pipeline = new List + { + new TaskPrepare_AFBP(), + new TaskGetBuildMap_AFBP(), + new TaskBuilding_AFBP(), + new TaskEncryption_AFBP(), + new TaskUpdateBundleInfo_AFBP(), + new TaskCreateManifest_AFBP(), + new TaskCreateReport_AFBP(), + new TaskCreatePackage_AFBP(), + new TaskCopyBundledFiles_AFBP(), + new TaskCreateCatalog_AFBP() + }; + return pipeline; + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildPipeline.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildPipeline.cs.meta new file mode 100644 index 00000000..87c09a6f --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileBuildPipeline.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19ef6fc50bd422c4db6fa53cbf0fe226 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileEntry.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileEntry.cs new file mode 100644 index 00000000..4bbe0c5e --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileEntry.cs @@ -0,0 +1,61 @@ + +using System; +using System.Text; + +namespace YooAsset.Editor +{ + /// + /// 归档文件条目信息(构建期临时数据结构) + /// + internal class ArchiveFileEntry + { + private byte[] _pathBytes; + + /// + /// 文件路径 + /// + public readonly string AssetPath; + + /// + /// 文件数据长度 + /// + public readonly long DataLength; + + /// + /// 文件 CRC32 + /// + public readonly uint FileCRC; + + /// + /// 数据在归档文件中的绝对偏移 + /// + public long DataOffset; + + /// + /// 构造归档文件条目 + /// + public ArchiveFileEntry(string assetPath, long dataLength, uint fileCRC) + { + if (string.IsNullOrEmpty(assetPath)) + throw new ArgumentException("Asset path is null or empty.", nameof(assetPath)); + if (dataLength < 0) + throw new ArgumentException($"Invalid data length {dataLength} for '{assetPath}'.", nameof(dataLength)); + if (dataLength > ArchiveBundleConsts.MaxChildFileSize) + throw new ArgumentException($"Child file exceeds maximum size ({ArchiveBundleConsts.MaxChildFileSize} bytes): '{assetPath}' ({dataLength} bytes).", nameof(dataLength)); + + AssetPath = assetPath; + DataLength = dataLength; + FileCRC = fileCRC; + } + + /// + /// 获取文件路径的 UTF8 字节缓存 + /// + public byte[] GetPathBytes() + { + if (_pathBytes == null) + _pathBytes = Encoding.UTF8.GetBytes(AssetPath); + return _pathBytes; + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileEntry.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileEntry.cs.meta new file mode 100644 index 00000000..6b2ca3f4 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/ArchiveFileEntry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a03062dc3dd175c438fcb92d3e06a33b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks.meta new file mode 100644 index 00000000..77b9c79d --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9dccc7a4589001469444e571235890a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskBuilding_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskBuilding_AFBP.cs new file mode 100644 index 00000000..338fc79d --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskBuilding_AFBP.cs @@ -0,0 +1,29 @@ + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的核心构建任务 + /// + public class TaskBuilding_AFBP : IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + var buildMapContext = context.GetContextObject(); + var buildParametersContext = context.GetContextObject(); + var buildParameters = buildParametersContext.Parameters as ArchiveFileBuildParameters; + string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory(); + + int progressValue = 0; + int fileTotalCount = buildMapContext.Collection.Count; + foreach (var bundleInfo in buildMapContext.Collection) + { + string archiveFilePath = $"{pipelineOutputDirectory}/{bundleInfo.BundleName}"; + var entries = ArchiveFileBuildHelper.CollectEntries(bundleInfo.AllPackAssets); + ArchiveFileBuildHelper.BuildArchiveFile(archiveFilePath, entries, buildParameters.FileAlignment); + EditorDialogUtility.DisplayProgressBar("Build archive files", ++progressValue, fileTotalCount); + } + EditorDialogUtility.ClearProgressBar(); + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskBuilding_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskBuilding_AFBP.cs.meta new file mode 100644 index 00000000..32f66370 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskBuilding_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 289e760820002e34b9054a81098d5fa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_AFBP.cs new file mode 100644 index 00000000..ee17eb97 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_AFBP.cs @@ -0,0 +1,23 @@ +using System; +using UnityEditor; + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的首包资源拷贝任务 + /// + public class TaskCopyBundledFiles_AFBP : TaskCopyBundledFiles, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + var buildParameters = buildParametersContext.Parameters; + var manifestContext = context.GetContextObject(); + if (buildParameters.BundledCopyOption != EBundledCopyOption.None) + { + CopyBundledFilesToStreaming(buildParametersContext, manifestContext.Manifest); + } + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_AFBP.cs.meta new file mode 100644 index 00000000..b6332191 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4fb32a77b3e799448cf4eae2a97a49e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateCatalog_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateCatalog_AFBP.cs new file mode 100644 index 00000000..cd4b74fc --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateCatalog_AFBP.cs @@ -0,0 +1,21 @@ +using System; +using UnityEditor; + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的资源目录创建任务 + /// + public class TaskCreateCatalog_AFBP : TaskCreateCatalog, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + if (buildParametersContext.Parameters.BundledCopyOption != EBundledCopyOption.None) + { + CreateCatalogFile(buildParametersContext); + } + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateCatalog_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateCatalog_AFBP.cs.meta new file mode 100644 index 00000000..5cbb510b --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateCatalog_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 813f7821d87b6f8498ddc4d675512413 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateManifest_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateManifest_AFBP.cs new file mode 100644 index 00000000..37601d97 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateManifest_AFBP.cs @@ -0,0 +1,21 @@ +using System; + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的清单创建任务 + /// + public class TaskCreateManifest_AFBP : TaskCreateManifest, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + CreateManifestFile(false, true, false, context); + } + + protected override string[] GetBundleDepends(BuildContext context, string bundleName) + { + return Array.Empty(); + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateManifest_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateManifest_AFBP.cs.meta new file mode 100644 index 00000000..7bee88d3 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateManifest_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21e10b308293d2e45972a9b4ba143a74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreatePackage_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreatePackage_AFBP.cs new file mode 100644 index 00000000..20aec562 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreatePackage_AFBP.cs @@ -0,0 +1,23 @@ +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的补丁包创建任务 + /// + public class TaskCreatePackage_AFBP : TaskCreatePackage, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + var buildMapContext = context.GetContextObject(); + CreatePackagePatch(buildParametersContext, buildMapContext); + } + + private void CreatePackagePatch(BuildParametersContext buildParametersContext, BuildMapContext buildMapContext) + { + string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory(); + BuildLogger.Log($"Start making patch package: '{packageOutputDirectory}'."); + CopyPackageBundles(buildMapContext); + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreatePackage_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreatePackage_AFBP.cs.meta new file mode 100644 index 00000000..a5138040 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreatePackage_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 721f0030551d41c40a2c6d3206c3897a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateReport_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateReport_AFBP.cs new file mode 100644 index 00000000..09a400ac --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateReport_AFBP.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; +using UnityEditor; + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的构建报告创建任务 + /// + public class TaskCreateReport_AFBP : TaskCreateReport, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + var buildParameters = context.GetContextObject(); + var buildMapContext = context.GetContextObject(); + var manifestContext = context.GetContextObject(); + CreateReportFile(buildParameters, buildMapContext, manifestContext); + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateReport_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateReport_AFBP.cs.meta new file mode 100644 index 00000000..6f343193 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskCreateReport_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e12187230b544940aeae7cb3c556299 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskEncryption_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskEncryption_AFBP.cs new file mode 100644 index 00000000..11e7ad86 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskEncryption_AFBP.cs @@ -0,0 +1,17 @@ + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的加密任务 + /// + public class TaskEncryption_AFBP : TaskEncryption, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + var buildParameters = context.GetContextObject(); + var buildMapContext = context.GetContextObject(); + EncryptingBundleFiles(buildParameters, buildMapContext); + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskEncryption_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskEncryption_AFBP.cs.meta new file mode 100644 index 00000000..cc27ddb6 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskEncryption_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16ff5758e3a98b64193c61ca68e94ddd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskGetBuildMap_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskGetBuildMap_AFBP.cs new file mode 100644 index 00000000..a21a2aaf --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskGetBuildMap_AFBP.cs @@ -0,0 +1,17 @@ + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的构建映射生成任务 + /// + public class TaskGetBuildMap_AFBP : TaskGetBuildMap, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + var buildMapContext = CreateBuildMap(true, buildParametersContext.Parameters); + context.SetContextObject(buildMapContext); + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskGetBuildMap_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskGetBuildMap_AFBP.cs.meta new file mode 100644 index 00000000..c19afe07 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskGetBuildMap_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 409de066b34f4b64fa9eaee790045492 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskPrepare_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskPrepare_AFBP.cs new file mode 100644 index 00000000..a9d359df --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskPrepare_AFBP.cs @@ -0,0 +1,31 @@ + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的准备任务 + /// + public class TaskPrepare_AFBP : TaskPrepare, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + var buildParameters = buildParametersContext.Parameters; + + // 检测构建参数 + buildParametersContext.CheckBuildParameters(); + + // 检测未保存场景 + CheckDirtyScenes(); + + // 删除历史缓存 + if (buildParameters.ClearBuildCacheFiles) + { + DeletePackageRootDirectory(buildParameters); + } + + // 准备输出目录 + PrepareOutputDirectory(buildParameters); + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskPrepare_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskPrepare_AFBP.cs.meta new file mode 100644 index 00000000..190d0762 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskPrepare_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f463d370e0512bb4c8d79e22fe149500 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_AFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_AFBP.cs new file mode 100644 index 00000000..880ebc05 --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_AFBP.cs @@ -0,0 +1,51 @@ +using System; +using System.IO; + +namespace YooAsset.Editor +{ + /// + /// 归档文件构建管线的资源包信息更新任务 + /// + public class TaskUpdateBundleInfo_AFBP : TaskUpdateBundleInfo, IBuildTask + { + /// + void IBuildTask.Run(BuildContext context) + { + UpdateBundleInfo(context); + } + + protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context) + { + return ComputeFileHash(bundleInfo, context); + } + protected override uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context) + { + return 0; + } + protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildContext context) + { + return ComputeFileHash(bundleInfo, context); + } + protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildContext context) + { + string filePath = bundleInfo.PackageSourceFilePath; + return HashUtility.ComputeFileCrc32AsUInt(filePath); + } + protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildContext context) + { + string filePath = bundleInfo.PackageSourceFilePath; + return FileUtility.GetFileSize(filePath); + } + + private string ComputeFileHash(BuildBundleInfo bundleInfo, BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + var parameters = buildParametersContext.Parameters as ArchiveFileBuildParameters; + string filePath = bundleInfo.PackageSourceFilePath; + if (parameters.IncludePathInHash) + return GetFileMD5IncludePath(filePath); + else + return HashUtility.ComputeFileMD5(filePath); + } + } +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_AFBP.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_AFBP.cs.meta new file mode 100644 index 00000000..6a3b669b --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ArchiveFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_AFBP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6263649b351967840836e9ca443c5574 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs index 43e2a9ce..04e728ed 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskGetBuildMap_ESBP.cs @@ -1,5 +1,4 @@ - -namespace YooAsset.Editor +namespace YooAsset.Editor { /// /// 编辑器模拟构建管线的构建映射生成任务 @@ -13,10 +12,17 @@ namespace YooAsset.Editor var buildMapContext = CreateBuildMap(true, buildParametersContext.Parameters); context.SetContextObject(buildMapContext); - if (buildParametersContext.Parameters.BuildBundleType == (int)EBundleType.RawBundle) + // 注意:检查每个原生文件资源包只能包含一个原生文件 + if (buildParametersContext.Parameters.BuildBundleType == (int)EBundleType.VirtualRawBundle) { CheckRawBundleMapContent(buildMapContext); } + + // 检查归档资源包内每个子文件大小不超过上限 + if (buildParametersContext.Parameters.BuildBundleType == (int)EBundleType.VirtualArchiveBundle) + { + CheckArchiveBundleMapContent(buildMapContext); + } } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs index fbe3dfd6..082a8872 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/BuildTasks/TaskPrepare_ESBP.cs @@ -1,4 +1,3 @@ -using System; namespace YooAsset.Editor { diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs index e3e00b2f..533327b5 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/EditorSimulateBuildPipeline/EditorSimulateBuildParameters.cs @@ -1,3 +1,4 @@ +using System; namespace YooAsset.Editor { @@ -6,5 +7,18 @@ namespace YooAsset.Editor /// public class EditorSimulateBuildParameters : BuildParameters { + /// + protected override void CheckBuildParametersCore() + { + // EditorSimulateBuildPipeline 只允许 VirtualBundle 类型 + if (BuildBundleType != (int)EBundleType.VirtualAssetBundle && + BuildBundleType != (int)EBundleType.VirtualRawBundle && + BuildBundleType != (int)EBundleType.VirtualArchiveBundle) + { + string message = BuildLogger.GetErrorMessage(ErrorCode.BuildBundleTypeNotSupported, + $"{nameof(EditorSimulateBuildPipeline)} only supports VirtualBundle types. Received: {(EBundleType)BuildBundleType}."); + throw new InvalidOperationException(message); + } + } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/LegacyBuildPipeline/BuildTasks/TaskPrepare_LBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/LegacyBuildPipeline/BuildTasks/TaskPrepare_LBP.cs index bd15a7d1..e15bbe7b 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/LegacyBuildPipeline/BuildTasks/TaskPrepare_LBP.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/LegacyBuildPipeline/BuildTasks/TaskPrepare_LBP.cs @@ -1,4 +1,3 @@ -using System; namespace YooAsset.Editor { diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/LegacyBuildPipeline/LegacyBuildParameters.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/LegacyBuildPipeline/LegacyBuildParameters.cs index c402923b..0ee293c5 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/LegacyBuildPipeline/LegacyBuildParameters.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/LegacyBuildPipeline/LegacyBuildParameters.cs @@ -36,7 +36,6 @@ namespace YooAsset.Editor /// 开启此项可以节省运行时清单占用的内存 public bool ReplaceAssetPathWithAddress = false; - /// /// 获取旧版构建管线的构建选项 /// diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_RFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_RFBP.cs index 926a4e55..51e5d4e9 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_RFBP.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCopyBundledFiles_RFBP.cs @@ -1,8 +1,5 @@ using System; -using System.Collections; -using System.Collections.Generic; using UnityEditor; -using UnityEngine; namespace YooAsset.Editor { diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreatePackage_RFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreatePackage_RFBP.cs index f3c32fce..53888404 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreatePackage_RFBP.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskCreatePackage_RFBP.cs @@ -20,8 +20,6 @@ namespace YooAsset.Editor { string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory(); BuildLogger.Log($"Start making patch package: '{packageOutputDirectory}'."); - - // 拷贝所有补丁文件 CopyPackageBundles(buildMapContext); } } diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskPrepare_RFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskPrepare_RFBP.cs index ca28445a..bca60e06 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskPrepare_RFBP.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskPrepare_RFBP.cs @@ -1,4 +1,3 @@ -using System; namespace YooAsset.Editor { @@ -16,6 +15,9 @@ namespace YooAsset.Editor // 检测构建参数 buildParametersContext.CheckBuildParameters(); + // 检测未保存场景 + CheckDirtyScenes(); + // 删除历史缓存 if (buildParameters.ClearBuildCacheFiles) { diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_RFBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_RFBP.cs index 55d42934..985585d5 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_RFBP.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/BuildTasks/TaskUpdateBundleInfo_RFBP.cs @@ -1,8 +1,5 @@ using System; using System.IO; -using System.Collections; -using System.Collections.Generic; -using UnityEditor; namespace YooAsset.Editor { @@ -19,18 +16,7 @@ namespace YooAsset.Editor protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context) { - var buildParametersContext = context.GetContextObject(); - var rawFileBuildParameters = buildParametersContext.Parameters as RawFileBuildParameters; - if (rawFileBuildParameters.IncludePathInHash) - { - string filePath = bundleInfo.PackageSourceFilePath; - return GetFileMD5IncludePath(filePath); - } - else - { - string filePath = bundleInfo.PackageSourceFilePath; - return HashUtility.ComputeFileMD5(filePath); - } + return ComputeFileHash(bundleInfo, context); } protected override uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context) { @@ -38,18 +24,7 @@ namespace YooAsset.Editor } protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildContext context) { - var buildParametersContext = context.GetContextObject(); - var rawFileBuildParameters = buildParametersContext.Parameters as RawFileBuildParameters; - if (rawFileBuildParameters.IncludePathInHash) - { - string filePath = bundleInfo.PackageSourceFilePath; - return GetFileMD5IncludePath(filePath); - } - else - { - string filePath = bundleInfo.PackageSourceFilePath; - return HashUtility.ComputeFileMD5(filePath); - } + return ComputeFileHash(bundleInfo, context); } protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildContext context) { @@ -62,12 +37,15 @@ namespace YooAsset.Editor return FileUtility.GetFileSize(filePath); } - private string GetFileMD5IncludePath(string filePath) + private string ComputeFileHash(BuildBundleInfo bundleInfo, BuildContext context) { - string pathHash = HashUtility.ComputeMD5(filePath.ToLowerInvariant()); - string contentHash = HashUtility.ComputeFileMD5(filePath); - string combined = pathHash + contentHash; - return HashUtility.ComputeMD5(combined); + var buildParametersContext = context.GetContextObject(); + var parameters = buildParametersContext.Parameters as RawFileBuildParameters; + string filePath = bundleInfo.PackageSourceFilePath; + if (parameters.IncludePathInHash) + return GetFileMD5IncludePath(filePath); + else + return HashUtility.ComputeFileMD5(filePath); } } -} \ No newline at end of file +} diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/RawFileBuildParameters.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/RawFileBuildParameters.cs index a0a6b49b..436c1ec7 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/RawFileBuildParameters.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/RawFileBuildPipeline/RawFileBuildParameters.cs @@ -1,6 +1,3 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEditor; namespace YooAsset.Editor { diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskPrepare_SBP.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskPrepare_SBP.cs index a076843b..6c8b1d53 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskPrepare_SBP.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskPrepare_SBP.cs @@ -1,4 +1,3 @@ -using System; namespace YooAsset.Editor { @@ -11,7 +10,7 @@ namespace YooAsset.Editor void IBuildTask.Run(BuildContext context) { var buildParametersContext = context.GetContextObject(); - var buildParameters = buildParametersContext.Parameters as ScriptableBuildParameters; + var buildParameters = buildParametersContext.Parameters; // 检测构建参数 buildParametersContext.CheckBuildParameters(); @@ -29,13 +28,6 @@ namespace YooAsset.Editor // 准备输出目录 PrepareOutputDirectory(buildParameters); - - // 检测内置着色器资源包名称 - if (string.IsNullOrEmpty(buildParameters.BuiltinShadersBundleName)) - { - string warning = BuildLogger.GetErrorMessage(ErrorCode.BuiltinShadersBundleNameIsNull, "Builtin shaders bundle name is null. It will cause resource redundancy."); - BuildLogger.Warning(warning); - } } } } diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ScriptableBuildPipeline/ScriptableBuildParameters.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ScriptableBuildPipeline/ScriptableBuildParameters.cs index d6d72d71..ea44e8a5 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ScriptableBuildPipeline/ScriptableBuildParameters.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/ScriptableBuildPipeline/ScriptableBuildParameters.cs @@ -72,6 +72,17 @@ namespace YooAsset.Editor public string MonoScriptsBundleName; + /// + protected override void CheckBuildParametersCore() + { + // 检测内置着色器资源包名称 + if (string.IsNullOrEmpty(BuiltinShadersBundleName)) + { + string warning = BuildLogger.GetErrorMessage(ErrorCode.BuiltinShadersBundleNameIsNull, "Builtin shaders bundle name is null. It will cause resource redundancy."); + BuildLogger.Warning(warning); + } + } + /// /// 获取可编程构建管线的构建参数 /// diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildSystem/ErrorCode.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildSystem/ErrorCode.cs index 5f21beaf..d1abb569 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildSystem/ErrorCode.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildSystem/ErrorCode.cs @@ -58,6 +58,16 @@ namespace YooAsset.Editor /// BuildBundleTypeIsUnknown = 117, + /// + /// 构建管线不支持指定的资源包类型 + /// + BuildBundleTypeNotSupported = 118, + + /// + /// 构建管线不支持资源包加密 + /// + BundleEncryptionNotSupported = 119, + /// /// 建议使用 SBP 构建管线 /// diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCopyBundledFiles.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCopyBundledFiles.cs similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCopyBundledFiles.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCopyBundledFiles.cs diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCopyBundledFiles.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCopyBundledFiles.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCopyBundledFiles.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCopyBundledFiles.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateCatalog.cs similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateCatalog.cs diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateCatalog.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateCatalog.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateManifest.cs similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateManifest.cs diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateManifest.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateManifest.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreatePackage.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreatePackage.cs similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreatePackage.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreatePackage.cs diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreatePackage.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreatePackage.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreatePackage.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreatePackage.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateReport.cs similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateReport.cs diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateReport.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskCreateReport.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskEncryption.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskEncryption.cs similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskEncryption.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskEncryption.cs diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskEncryption.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskEncryption.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskEncryption.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskEncryption.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskGetBuildMap.cs similarity index 92% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskGetBuildMap.cs index 20eeabac..73be8bf4 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskGetBuildMap.cs @@ -270,5 +270,27 @@ namespace YooAsset.Editor } } } + + /// + /// 检测归档资源包内每个子文件是否超过最大允许大小 + /// + /// 构建映射上下文 + protected void CheckArchiveBundleMapContent(BuildMapContext buildMapContext) + { + foreach (var bundleInfo in buildMapContext.Collection) + { + foreach (var asset in bundleInfo.AllPackAssets) + { + string assetPath = asset.AssetInfo.AssetPath; + long fileSize = EditorFileUtility.GetFileSize(assetPath); + if (fileSize > ArchiveBundleConsts.MaxChildFileSize) + { + throw new InvalidOperationException( + $"Archive child file exceeds maximum size ({ArchiveBundleConsts.MaxChildFileSize} bytes): " + + $"'{assetPath}' ({fileSize} bytes) in bundle '{bundleInfo.BundleName}'."); + } + } + } + } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskGetBuildMap.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskGetBuildMap.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskPrepare.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskPrepare.cs similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskPrepare.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskPrepare.cs diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskPrepare.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskPrepare.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskPrepare.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskPrepare.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskUpdateBundleInfo.cs similarity index 92% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskUpdateBundleInfo.cs index 91f8296c..bb3db8dd 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskUpdateBundleInfo.cs @@ -106,5 +106,16 @@ namespace YooAsset.Editor /// 构建上下文 /// 文件大小 protected abstract long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildContext context); + + /// + /// 计算包含路径信息的文件 MD5 + /// + protected string GetFileMD5IncludePath(string filePath) + { + string pathHash = HashUtility.ComputeMD5(filePath.ToLowerInvariant()); + string contentHash = HashUtility.ComputeFileMD5(filePath); + string combined = pathHash + contentHash; + return HashUtility.ComputeMD5(combined); + } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs.meta b/Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskUpdateBundleInfo.cs.meta similarity index 100% rename from Assets/YooAsset/Editor/BundleBuilder/BuildPipeline/BaseTasks/TaskUpdateBundleInfo.cs.meta rename to Assets/YooAsset/Editor/BundleBuilder/BuildTasks/TaskUpdateBundleInfo.cs.meta diff --git a/Assets/YooAsset/Editor/BundleBuilder/BundleSimulateBuilder.cs b/Assets/YooAsset/Editor/BundleBuilder/BundleSimulateBuilder.cs index e1a20907..1eed259b 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/BundleSimulateBuilder.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/BundleSimulateBuilder.cs @@ -16,9 +16,7 @@ namespace YooAsset.Editor /// 包裹构建结果 public static PackageBuildResult SimulateBuild(PackageBuildParameters buildParam) { - string packageName = buildParam.PackageName; string buildPipelineName = buildParam.BuildPipelineName; - if (buildPipelineName == EBuildPipeline.EditorSimulateBuildPipeline.ToString()) { var buildParameters = new EditorSimulateBuildParameters(); @@ -27,7 +25,7 @@ namespace YooAsset.Editor buildParameters.BuildPipeline = EBuildPipeline.EditorSimulateBuildPipeline.ToString(); buildParameters.BuildBundleType = buildParam.BuildBundleType; buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget; - buildParameters.PackageName = packageName; + buildParameters.PackageName = buildParam.PackageName; buildParameters.PackageVersion = "Simulate"; buildParameters.FileNameStyle = EFileNameStyle.HashName; buildParameters.BundledCopyOption = EBundledCopyOption.None; diff --git a/Assets/YooAsset/Editor/BundleBuilder/EBuildPipeline.cs b/Assets/YooAsset/Editor/BundleBuilder/EBuildPipeline.cs index 5993d786..5e959ce6 100644 --- a/Assets/YooAsset/Editor/BundleBuilder/EBuildPipeline.cs +++ b/Assets/YooAsset/Editor/BundleBuilder/EBuildPipeline.cs @@ -30,5 +30,10 @@ namespace YooAsset.Editor /// 团结引擎 InstantAsset 构建管线 (IABP) /// InstantAssetBuildPipeline, + + /// + /// 归档文件构建管线 (AFBP) + /// + ArchiveFileBuildPipeline, } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline.meta b/Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline.meta new file mode 100644 index 00000000..399d003e --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17a0d1dece605b74fb10ceb9761147e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline/ArchiveFileBuildPipelineViewer.cs b/Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline/ArchiveFileBuildPipelineViewer.cs new file mode 100644 index 00000000..72ab421e --- /dev/null +++ b/Assets/YooAsset/Editor/BundleBuilder/VisualViewers/ArchiveFileBuildPipeline/ArchiveFileBuildPipelineViewer.cs @@ -0,0 +1,166 @@ +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 +{ + /// + /// 归档文件构建管线(ArchiveFileBuildPipeline)的构建参数查看器 + /// + [BuildPipelineAttribute(nameof(EBuildPipeline.ArchiveFileBuildPipeline))] + internal class ArchiveFileBuildPipelineViewer : BuildPipelineViewerBase + { + /// + /// 根布局容器(UXML 克隆实例) + /// + protected TemplateContainer Root; + + /// + /// 构建输出目录文本框 + /// + protected TextField _buildOutputField; + + /// + /// 构建版本文本框 + /// + protected TextField _buildVersionField; + + /// + /// 资源清单加密器下拉框 + /// + protected PopupField _manifestEncryptorField; + + /// + /// 资源清单解密器下拉框 + /// + protected PopupField _manifestDecryptorField; + + /// + /// 输出文件名称样式枚举字段 + /// + protected EnumField _outputNameStyleField; + + /// + /// 首包资源拷贝选项枚举字段 + /// + protected EnumField _bundledCopyOptionField; + + /// + /// 首包资源拷贝标签参数文本框 + /// + protected TextField _bundledCopyParamField; + + /// + /// 是否清理构建缓存开关 + /// + protected Toggle _clearBuildCacheToggle; + + /// + /// 是否使用资源依赖数据库开关 + /// + protected Toggle _useAssetDependencyDBToggle; + + + public override void CreateView(VisualElement parent) + { + // 加载布局文件 + var visualAsset = UxmlLoader.LoadWindowUxml(); + if (visualAsset == null) + return; + + Root = visualAsset.CloneTree(); + Root.style.flexGrow = 1f; + parent.Add(Root); + + // 输出目录 + _buildOutputField = Root.Q("BuildOutput"); + SetBuildOutputField(_buildOutputField); + + // 构建版本 + _buildVersionField = Root.Q("BuildVersion"); + SetBuildVersionField(_buildVersionField); + + // 清单服务 + var popupContainer = Root.Q("PopupContainer"); + _manifestEncryptorField = CreateManifestEncryptorField(popupContainer); + _manifestDecryptorField = CreateManifestDecryptorField(popupContainer); + + // 输出文件名称样式 + _outputNameStyleField = Root.Q("FileNameStyle"); + SetOutputNameStyleField(_outputNameStyleField); + + // 首包资源拷贝参数 + _bundledCopyParamField = Root.Q("BundledCopyParam"); + SetBundledCopyParamField(_bundledCopyParamField); + SetBundledCopyParamVisible(_bundledCopyParamField); + + // 首包资源拷贝选项 + _bundledCopyOptionField = Root.Q("BundledCopyOption"); + SetBundledCopyOptionField(_bundledCopyOptionField, _bundledCopyParamField); + + // 清理构建缓存 + _clearBuildCacheToggle = Root.Q("ClearBuildCache"); + SetClearBuildCacheToggle(_clearBuildCacheToggle); + + // 使用资源依赖数据库 + _useAssetDependencyDBToggle = Root.Q("UseAssetDependency"); + SetUseAssetDependencyDBToggle(_useAssetDependencyDBToggle); + + // 构建按钮 + var buildButton = Root.Q