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