diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs
index 671722b4..4f1948b1 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs
@@ -67,15 +67,27 @@ namespace YooAsset.Editor
EditorPrefs.SetString(key, buildinFileCopyParams);
}
- // EncyptionClassName
- public static string GetPackageEncyptionClassName(string packageName, string buildPipeline)
+ // EncyptionServicesClassName
+ public static string GetPackageEncyptionServicesClassName(string packageName, string buildPipeline)
{
- string key = $"{Application.productName}_{packageName}_{buildPipeline}_EncyptionClassName";
- return EditorPrefs.GetString(key, string.Empty);
+ string key = $"{Application.productName}_{packageName}_{buildPipeline}_EncyptionServicesClassName";
+ return EditorPrefs.GetString(key, $"{typeof(EncryptionNone).FullName}");
}
- public static void SetPackageEncyptionClassName(string packageName, string buildPipeline, string encyptionClassName)
+ public static void SetPackageEncyptionServicesClassName(string packageName, string buildPipeline, string encyptionClassName)
{
- string key = $"{Application.productName}_{packageName}_{buildPipeline}_EncyptionClassName";
+ string key = $"{Application.productName}_{packageName}_{buildPipeline}_EncyptionServicesClassName";
+ EditorPrefs.SetString(key, encyptionClassName);
+ }
+
+ // ManifestServicesClassName
+ public static string GetPackageManifestServicesClassName(string packageName, string buildPipeline)
+ {
+ string key = $"{Application.productName}_{packageName}_{buildPipeline}_ManifestServicesClassName";
+ return EditorPrefs.GetString(key, $"{typeof(ManifestNone).FullName}");
+ }
+ public static void SetPackageManifestServicesClassName(string packageName, string buildPipeline, string encyptionClassName)
+ {
+ string key = $"{Application.productName}_{packageName}_{buildPipeline}_ManifestServicesClassName";
EditorPrefs.SetString(key, encyptionClassName);
}
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
index e701dabe..58938c4f 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
@@ -98,6 +98,11 @@ namespace YooAsset.Editor
///
public IEncryptionServices EncryptionServices;
+ ///
+ /// 资源清单服务类
+ ///
+ public IManifestServices ManifestServices;
+
private string _pipelineOutputDirectory = string.Empty;
private string _packageOutputDirectory = string.Empty;
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs
index 67dabdde..03b8af32 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs
@@ -14,7 +14,8 @@ namespace YooAsset.Editor
{
string buildinRootDirectory = buildParametersContext.GetBuildinRootDirectory();
string buildPackageName = buildParametersContext.Parameters.PackageName;
- DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(buildPackageName, buildinRootDirectory);
+ var manifestServices = buildParametersContext.Parameters.ManifestServices;
+ DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(manifestServices, buildPackageName, buildinRootDirectory);
// 刷新目录
AssetDatabase.Refresh();
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
index a23dd021..5d5c6e62 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
@@ -58,7 +58,7 @@ namespace YooAsset.Editor
if (processBundleDepends)
ProcessBuiltinBundleDependency(context, manifest);
- // 创建补丁清单文本文件
+ // 创建资源清单文本文件
{
string fileName = YooAssetSettingsData.GetManifestJsonFileName(buildParameters.PackageName, buildParameters.PackageVersion);
string filePath = $"{packageOutputDirectory}/{fileName}";
@@ -66,18 +66,18 @@ namespace YooAsset.Editor
BuildLogger.Log($"Create package manifest file: {filePath}");
}
- // 创建补丁清单二进制文件
+ // 创建资源清单二进制文件
string packageHash;
string packagePath;
{
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(buildParameters.PackageName, buildParameters.PackageVersion);
packagePath = $"{packageOutputDirectory}/{fileName}";
- ManifestTools.SerializeToBinary(packagePath, manifest);
+ ManifestTools.SerializeToBinary(packagePath, manifest, buildParameters.ManifestServices);
packageHash = HashUtility.FileCRC32(packagePath);
BuildLogger.Log($"Create package manifest file: {packagePath}");
}
- // 创建补丁清单哈希文件
+ // 创建资源清单哈希文件
{
string fileName = YooAssetSettingsData.GetPackageHashFileName(buildParameters.PackageName, buildParameters.PackageVersion);
string filePath = $"{packageOutputDirectory}/{fileName}";
@@ -85,7 +85,7 @@ namespace YooAsset.Editor
BuildLogger.Log($"Create package manifest hash file: {filePath}");
}
- // 创建补丁清单版本文件
+ // 创建资源清单版本文件
{
string fileName = YooAssetSettingsData.GetPackageVersionFileName(buildParameters.PackageName);
string filePath = $"{packageOutputDirectory}/{fileName}";
@@ -97,7 +97,7 @@ namespace YooAsset.Editor
{
ManifestContext manifestContext = new ManifestContext();
byte[] bytesData = FileUtility.ReadAllBytes(packagePath);
- manifestContext.Manifest = ManifestTools.DeserializeFromBinary(bytesData);
+ manifestContext.Manifest = ManifestTools.DeserializeFromBinary(bytesData, buildParameters.ManifestServices);
context.SetContextObject(manifestContext);
}
}
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
index 3a358bf5..79bf4f5d 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
@@ -43,7 +43,8 @@ namespace YooAsset.Editor
buildReport.Summary.EnableSharePackRule = buildParameters.EnableSharePackRule;
buildReport.Summary.SingleReferencedPackAlone = buildParameters.SingleReferencedPackAlone;
buildReport.Summary.FileNameStyle = buildParameters.FileNameStyle;
- buildReport.Summary.EncryptionClassName = buildParameters.EncryptionServices == null ? "null" : buildParameters.EncryptionServices.GetType().FullName;
+ buildReport.Summary.EncryptionServicesClassName = buildParameters.EncryptionServices == null ? "null" : buildParameters.EncryptionServices.GetType().FullName;
+ buildReport.Summary.ManifestServicesClassName = buildParameters.ManifestServices == null ? "null" : buildParameters.ManifestServices.GetType().FullName;
if (buildParameters is BuiltinBuildParameters)
{
var builtinBuildParameters = buildParameters as BuiltinBuildParameters;
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultEncryption.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultEncryptionServices.cs
similarity index 100%
rename from Assets/YooAsset/Editor/AssetBundleBuilder/DefaultEncryption.cs
rename to Assets/YooAsset/Editor/AssetBundleBuilder/DefaultEncryptionServices.cs
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultEncryption.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultEncryptionServices.cs.meta
similarity index 100%
rename from Assets/YooAsset/Editor/AssetBundleBuilder/DefaultEncryption.cs.meta
rename to Assets/YooAsset/Editor/AssetBundleBuilder/DefaultEncryptionServices.cs.meta
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs
new file mode 100644
index 00000000..62ebc1ea
--- /dev/null
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs
@@ -0,0 +1,15 @@
+
+namespace YooAsset.Editor
+{
+ public class ManifestNone : IManifestServices
+ {
+ public byte[] ProcessManifest(byte[] fileData)
+ {
+ return fileData;
+ }
+ public byte[] RestoreManifest(byte[] fileData)
+ {
+ return fileData;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs.meta
new file mode 100644
index 00000000..73371bc0
--- /dev/null
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 446513b0ea9f5d445ade0cfb09c5073b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs
index 01cfbf68..261e194f 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs
@@ -44,19 +44,33 @@ namespace YooAsset.Editor
}
///
- /// 创建加密类实例
+ /// 创建资源加密服务类实例
///
- protected IEncryptionServices CreateEncryptionInstance()
+ protected IEncryptionServices CreateEncryptionServicesInstance()
{
- var encyptionClassName = AssetBundleBuilderSetting.GetPackageEncyptionClassName(PackageName, PipelineName);
- var encryptionClassTypes = EditorTools.GetAssignableTypes(typeof(IEncryptionServices));
- var classType = encryptionClassTypes.Find(x => x.FullName.Equals(encyptionClassName));
+ var className = AssetBundleBuilderSetting.GetPackageEncyptionServicesClassName(PackageName, PipelineName);
+ var classTypes = EditorTools.GetAssignableTypes(typeof(IEncryptionServices));
+ var classType = classTypes.Find(x => x.FullName.Equals(className));
if (classType != null)
return (IEncryptionServices)Activator.CreateInstance(classType);
else
return null;
}
+ ///
+ /// 创建资源清单服务类实例
+ ///
+ protected IManifestServices CreateManifestServicesInstance()
+ {
+ var className = AssetBundleBuilderSetting.GetPackageManifestServicesClassName(PackageName, PipelineName);
+ var classTypes = EditorTools.GetAssignableTypes(typeof(IManifestServices));
+ var classType = classTypes.Find(x => x.FullName.Equals(className));
+ if (classType != null)
+ return (IManifestServices)Activator.CreateInstance(classType);
+ else
+ return null;
+ }
+
#region UI元素通用处理方法
protected void SetBuildOutputField(TextField textField)
{
@@ -149,35 +163,66 @@ namespace YooAsset.Editor
});
UIElementsTools.SetElementLabelMinWidth(toggle, LabelMinWidth);
}
- protected PopupField CreateEncryptionField(VisualElement container)
+ protected PopupField CreateEncryptionServicesField(VisualElement container)
{
- // 加密方法
- var encryptionClassTypes = EditorTools.GetAssignableTypes(typeof(IEncryptionServices));
- if (encryptionClassTypes.Count > 0)
+ // 加密服务类
+ var classTypes = EditorTools.GetAssignableTypes(typeof(IEncryptionServices));
+ if (classTypes.Count > 0)
{
- var encyptionClassName = AssetBundleBuilderSetting.GetPackageEncyptionClassName(PackageName, PipelineName);
- int defaultIndex = encryptionClassTypes.FindIndex(x => x.FullName.Equals(encyptionClassName));
+ var className = AssetBundleBuilderSetting.GetPackageEncyptionServicesClassName(PackageName, PipelineName);
+ int defaultIndex = classTypes.FindIndex(x => x.FullName.Equals(className));
if (defaultIndex < 0)
defaultIndex = 0;
- var encryptionField = new PopupField(encryptionClassTypes, defaultIndex);
- encryptionField.label = "Encryption";
- encryptionField.style.width = StyleWidth;
- encryptionField.RegisterValueChangedCallback(evt =>
+ var popupField = new PopupField(classTypes, defaultIndex);
+ popupField.label = "Encryption Services";
+ popupField.style.width = StyleWidth;
+ popupField.RegisterValueChangedCallback(evt =>
{
- AssetBundleBuilderSetting.SetPackageEncyptionClassName(PackageName, PipelineName, encryptionField.value.FullName);
+ AssetBundleBuilderSetting.SetPackageEncyptionServicesClassName(PackageName, PipelineName, popupField.value.FullName);
});
- container.Add(encryptionField);
- UIElementsTools.SetElementLabelMinWidth(encryptionField, LabelMinWidth);
- return encryptionField;
+ container.Add(popupField);
+ UIElementsTools.SetElementLabelMinWidth(popupField, LabelMinWidth);
+ return popupField;
}
else
{
- var encryptionField = new PopupField();
- encryptionField.label = "Encryption";
- encryptionField.style.width = StyleWidth;
- container.Add(encryptionField);
- UIElementsTools.SetElementLabelMinWidth(encryptionField, LabelMinWidth);
- return encryptionField;
+ var popupField = new PopupField();
+ popupField.label = "Encryption Services";
+ popupField.style.width = StyleWidth;
+ container.Add(popupField);
+ UIElementsTools.SetElementLabelMinWidth(popupField, LabelMinWidth);
+ return popupField;
+ }
+ }
+ protected PopupField CreateManifestServicesField(VisualElement container)
+ {
+ // 清单服务类
+ var classTypes = EditorTools.GetAssignableTypes(typeof(IManifestServices));
+ if (classTypes.Count > 0)
+ {
+ var className = AssetBundleBuilderSetting.GetPackageManifestServicesClassName(PackageName, PipelineName);
+ int defaultIndex = classTypes.FindIndex(x => x.FullName.Equals(className));
+ if (defaultIndex < 0)
+ defaultIndex = 0;
+ var popupField = new PopupField(classTypes, defaultIndex);
+ popupField.label = "Manifest Services";
+ popupField.style.width = StyleWidth;
+ popupField.RegisterValueChangedCallback(evt =>
+ {
+ AssetBundleBuilderSetting.SetPackageManifestServicesClassName(PackageName, PipelineName, popupField.value.FullName);
+ });
+ container.Add(popupField);
+ UIElementsTools.SetElementLabelMinWidth(popupField, LabelMinWidth);
+ return popupField;
+ }
+ else
+ {
+ var popupField = new PopupField();
+ popupField.label = "Manifest Services";
+ popupField.style.width = StyleWidth;
+ container.Add(popupField);
+ UIElementsTools.SetElementLabelMinWidth(popupField, LabelMinWidth);
+ return popupField;
}
}
#endregion
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.cs
index 42e47242..7254835d 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.cs
@@ -16,7 +16,8 @@ namespace YooAsset.Editor
protected TemplateContainer Root;
protected TextField _buildOutputField;
protected TextField _buildVersionField;
- protected PopupField _encryptionField;
+ protected PopupField _encryptionServicesField;
+ protected PopupField _manifestServicesField;
protected EnumField _compressionField;
protected EnumField _outputNameStyleField;
protected EnumField _copyBuildinFileOptionField;
@@ -43,9 +44,10 @@ namespace YooAsset.Editor
_buildVersionField = Root.Q("BuildVersion");
SetBuildVersionField(_buildVersionField);
- // 加密方法
- var encryptionContainer = Root.Q("EncryptionContainer");
- _encryptionField = CreateEncryptionField(encryptionContainer);
+ // 服务类
+ var popupContainer = Root.Q("PopupContainer");
+ _encryptionServicesField = CreateEncryptionServicesField(popupContainer);
+ _manifestServicesField = CreateManifestServicesField(popupContainer);
// 压缩方式选项
_compressionField = Root.Q("Compression");
@@ -116,7 +118,8 @@ namespace YooAsset.Editor
buildParameters.CompressOption = compressOption;
buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
- buildParameters.EncryptionServices = CreateEncryptionInstance();
+ buildParameters.EncryptionServices = CreateEncryptionServicesInstance();
+ buildParameters.ManifestServices = CreateManifestServicesInstance();
BuiltinBuildPipeline pipeline = new BuiltinBuildPipeline();
var buildResult = pipeline.Run(buildParameters, true);
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.uxml b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.uxml
index 63ce7602..7c7f8bf2 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.uxml
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.uxml
@@ -4,7 +4,7 @@
-
+
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipeline/EditorSimulateBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipeline/EditorSimulateBuildPipelineViewer.cs
index c67c5bbb..1e1422c2 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipeline/EditorSimulateBuildPipelineViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/EditorSimulateBuildpipeline/EditorSimulateBuildPipelineViewer.cs
@@ -74,7 +74,6 @@ namespace YooAsset.Editor
buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
- buildParameters.EncryptionServices = CreateEncryptionInstance();
EditorSimulateBuildPipeline pipeline = new EditorSimulateBuildPipeline();
var buildResult = pipeline.Run(buildParameters, true);
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.cs
index 3067acc8..230de5c8 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.cs
@@ -16,7 +16,8 @@ namespace YooAsset.Editor
protected TemplateContainer Root;
protected TextField _buildOutputField;
protected TextField _buildVersionField;
- protected PopupField _encryptionField;
+ protected PopupField _encryptionServicesField;
+ protected PopupField _manifestServicesField;
protected EnumField _outputNameStyleField;
protected EnumField _copyBuildinFileOptionField;
protected TextField _copyBuildinFileTagsField;
@@ -43,8 +44,9 @@ namespace YooAsset.Editor
SetBuildVersionField(_buildVersionField);
// 加密方法
- var encryptionContainer = Root.Q("EncryptionContainer");
- _encryptionField = CreateEncryptionField(encryptionContainer);
+ var popupContainer = Root.Q("PopupContainer");
+ _encryptionServicesField = CreateEncryptionServicesField(popupContainer);
+ _manifestServicesField = CreateManifestServicesField(popupContainer);
// 输出文件名称样式
_outputNameStyleField = Root.Q("FileNameStyle");
@@ -108,7 +110,8 @@ namespace YooAsset.Editor
buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
- buildParameters.EncryptionServices = CreateEncryptionInstance();
+ buildParameters.EncryptionServices = CreateEncryptionServicesInstance();
+ buildParameters.ManifestServices = CreateManifestServicesInstance();
RawFileBuildPipeline pipeline = new RawFileBuildPipeline();
var buildResult = pipeline.Run(buildParameters, true);
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.uxml b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.uxml
index 11c468ce..24ef3807 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.uxml
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.uxml
@@ -4,7 +4,7 @@
-
+
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.cs
index 442da077..f010a688 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.cs
@@ -16,7 +16,8 @@ namespace YooAsset.Editor
protected TemplateContainer Root;
protected TextField _buildOutputField;
protected TextField _buildVersionField;
- protected PopupField _encryptionField;
+ protected PopupField _encryptionServicesField;
+ protected PopupField _manifestServicesField;
protected EnumField _compressionField;
protected EnumField _outputNameStyleField;
protected EnumField _copyBuildinFileOptionField;
@@ -44,8 +45,9 @@ namespace YooAsset.Editor
SetBuildVersionField(_buildVersionField);
// 加密方法
- var encryptionContainer = Root.Q("EncryptionContainer");
- _encryptionField = CreateEncryptionField(encryptionContainer);
+ var popupContainer = Root.Q("PopupContainer");
+ _encryptionServicesField = CreateEncryptionServicesField(popupContainer);
+ _manifestServicesField = CreateManifestServicesField(popupContainer);
// 压缩方式选项
_compressionField = Root.Q("Compression");
@@ -118,7 +120,8 @@ namespace YooAsset.Editor
buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
buildParameters.BuiltinShadersBundleName = builtinShaderBundleName;
- buildParameters.EncryptionServices = CreateEncryptionInstance();
+ buildParameters.EncryptionServices = CreateEncryptionServicesInstance();
+ buildParameters.ManifestServices = CreateManifestServicesInstance();
ScriptableBuildPipeline pipeline = new ScriptableBuildPipeline();
var buildResult = pipeline.Run(buildParameters, true);
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.uxml b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.uxml
index 63ce7602..7c7f8bf2 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.uxml
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.uxml
@@ -4,7 +4,7 @@
-
+
diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs b/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
index 994f004f..893f43f9 100644
--- a/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
+++ b/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
@@ -71,9 +71,10 @@ namespace YooAsset.Editor
public bool UseAssetDependencyDB;
public bool EnableSharePackRule;
public bool SingleReferencedPackAlone;
- public string EncryptionClassName;
+ public string EncryptionServicesClassName;
+ public string ManifestServicesClassName;
public EFileNameStyle FileNameStyle;
-
+
// 引擎参数
public ECompressOption CompressOption;
public bool DisableWriteTypeTree;
diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
index 672d4683..5f44e1bd 100644
--- a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
@@ -66,7 +66,8 @@ namespace YooAsset.Editor
BindListViewItem("Use Asset Dependency DB", $"{buildReport.Summary.UseAssetDependencyDB}");
BindListViewItem("Enable Share Pack Rule", $"{buildReport.Summary.EnableSharePackRule}");
BindListViewItem("Single Referenced Pack Alone", $"{buildReport.Summary.SingleReferencedPackAlone}");
- BindListViewItem("Encryption Class Name", buildReport.Summary.EncryptionClassName);
+ BindListViewItem("Encryption Services", buildReport.Summary.EncryptionServicesClassName);
+ BindListViewItem("Manifest Services", buildReport.Summary.ManifestServicesClassName);
BindListViewItem("FileNameStyle", $"{buildReport.Summary.FileNameStyle}");
BindListViewItem("CompressOption", $"{buildReport.Summary.CompressOption}");
BindListViewItem("DisableWriteTypeTree", $"{buildReport.Summary.DisableWriteTypeTree}");
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
index d061b6ea..d9600089 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
@@ -88,6 +88,11 @@ namespace YooAsset
/// 自定义参数:解密方法类
///
public IDecryptionServices DecryptionServices { private set; get; }
+
+ ///
+ /// 自定义参数:资源清单服务类
+ ///
+ public IManifestServices ManifestServices { private set; get; }
#endregion
@@ -174,6 +179,10 @@ namespace YooAsset
{
DecryptionServices = (IDecryptionServices)value;
}
+ else if (name == FileSystemParametersDefine.MANIFEST_SERVICES)
+ {
+ ManifestServices = (IManifestServices)value;
+ }
else
{
YooLogger.Warning($"Invalid parameter : {name}");
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
index 8ac5b494..1f960d17 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
@@ -11,7 +11,7 @@ namespace YooAsset
///
/// 在构建应用程序前自动生成内置资源目录文件。
- /// 原理:搜索StreamingAssets目录下的所有资源文件,然后将这些文件信息写入文件,并存储在Resources目录下。
+ /// 原理:搜索StreamingAssets目录下的所有资源文件,将这些文件信息写入文件,然后在运行时做查询用途。
///
public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
{
@@ -21,7 +21,7 @@ namespace YooAsset
DirectoryInfo rootDirectory = new DirectoryInfo(rootPath);
if (rootDirectory.Exists == false)
{
- UnityEngine.Debug.LogWarning($"Can not found StreamingAssets root directory : {rootPath}");
+ Debug.LogWarning($"Can not found StreamingAssets root directory : {rootPath}");
return;
}
@@ -31,10 +31,17 @@ namespace YooAsset
{
string packageName = subDirectory.Name;
string pacakgeDirectory = subDirectory.FullName;
- bool result = CreateBuildinCatalogFile(packageName, pacakgeDirectory);
- if (result == false)
+ try
{
- throw new System.Exception($"Create package {packageName} catalog file failed ! See the detail error in console !");
+ bool result = CreateBuildinCatalogFile(null, packageName, pacakgeDirectory);
+ if (result == false)
+ {
+ Debug.LogError($"Create package {packageName} catalog file failed ! See the detail error in console !");
+ }
+ }
+ catch (System.Exception ex)
+ {
+ Debug.LogError($"Create package {packageName} catalog file failed ! {ex.Message}");
}
}
}
@@ -42,7 +49,7 @@ namespace YooAsset
///
/// 生成包裹的内置资源目录文件
///
- public static bool CreateBuildinCatalogFile(string packageName, string pacakgeDirectory)
+ public static bool CreateBuildinCatalogFile(IManifestServices services, string packageName, string pacakgeDirectory)
{
// 获取资源清单版本
string packageVersion;
@@ -70,7 +77,7 @@ namespace YooAsset
}
var binaryData = FileUtility.ReadAllBytes(manifestFilePath);
- packageManifest = ManifestTools.DeserializeFromBinary(binaryData);
+ packageManifest = ManifestTools.DeserializeFromBinary(binaryData, services);
}
// 获取文件名映射关系
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
index 2cc48f3a..ac46ab57 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
@@ -106,10 +106,11 @@ namespace YooAsset
if (_loadCatalogFileOp == null)
{
#if UNITY_EDITOR
+ /*
// 兼容性初始化
// 说明:内置文件系统在编辑器下运行时需要动态生成
string packageRoot = _fileSystem.FileRoot;
- bool result = DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.PackageName, packageRoot);
+ bool result = DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.ManifestServices, _fileSystem.PackageName, packageRoot);
if (result == false)
{
_steps = ESteps.Done;
@@ -117,6 +118,7 @@ namespace YooAsset
Error = $"Create package catalog file failed ! See the detail error in console !";
return;
}
+ */
#endif
_loadCatalogFileOp = new LoadBuildinCatalogFileOperation(_fileSystem);
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinPackageManifestOperation.cs
index ccc5c652..0e65591d 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinPackageManifestOperation.cs
@@ -85,7 +85,7 @@ namespace YooAsset
{
if (_deserializer == null)
{
- _deserializer = new DeserializeManifestOperation(_webDataRequestOp.Result);
+ _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestServices, _webDataRequestOp.Result);
_deserializer.StartOperation();
AddChildOperation(_deserializer);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
index 77de987f..8a3ac1da 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
@@ -58,7 +58,7 @@ namespace YooAsset
///
/// 自定义参数:远程服务接口
///
- public IRemoteServices RemoteServices { private set; get; } = null;
+ public IRemoteServices RemoteServices { private set; get; }
///
/// 自定义参数:初始化的时候缓存文件校验级别
@@ -99,6 +99,11 @@ namespace YooAsset
/// 自定义参数:解密方法类
///
public IDecryptionServices DecryptionServices { private set; get; }
+
+ ///
+ /// 自定义参数:资源清单服务类
+ ///
+ public IManifestServices ManifestServices { private set; get; }
#endregion
@@ -221,6 +226,10 @@ namespace YooAsset
{
DecryptionServices = (IDecryptionServices)value;
}
+ else if (name == FileSystemParametersDefine.MANIFEST_SERVICES)
+ {
+ ManifestServices = (IManifestServices)value;
+ }
else
{
YooLogger.Warning($"Invalid parameter : {name}");
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/LoadCachePackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/LoadCachePackageManifestOperation.cs
index 711f19cd..4f349184 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/LoadCachePackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/LoadCachePackageManifestOperation.cs
@@ -75,7 +75,7 @@ namespace YooAsset
{
if (_deserializer == null)
{
- _deserializer = new DeserializeManifestOperation(_fileData);
+ _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestServices, _fileData);
_deserializer.StartOperation();
AddChildOperation(_deserializer);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/Operation/internal/LoadEditorPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/Operation/internal/LoadEditorPackageManifestOperation.cs
index cad37d04..c6ebcc4b 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/Operation/internal/LoadEditorPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/Operation/internal/LoadEditorPackageManifestOperation.cs
@@ -75,7 +75,7 @@ namespace YooAsset
{
if (_deserializer == null)
{
- _deserializer = new DeserializeManifestOperation(_fileData);
+ _deserializer = new DeserializeManifestOperation(null, _fileData);
_deserializer.StartOperation();
AddChildOperation(_deserializer);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs
index 45c20696..e956ac3a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs
@@ -46,12 +46,17 @@ namespace YooAsset
///
/// 自定义参数:跨域下载服务接口
///
- public IRemoteServices RemoteServices { private set; get; } = null;
+ public IRemoteServices RemoteServices { private set; get; }
///
/// 自定义参数:解密方法类
///
public IWebDecryptionServices DecryptionServices { private set; get; }
+
+ ///
+ /// 自定义参数:资源清单服务类
+ ///
+ public IManifestServices ManifestServices { private set; get; }
#endregion
@@ -111,6 +116,10 @@ namespace YooAsset
{
DecryptionServices = (IWebDecryptionServices)value;
}
+ else if (name == FileSystemParametersDefine.MANIFEST_SERVICES)
+ {
+ ManifestServices = (IManifestServices)value;
+ }
else
{
YooLogger.Warning($"Invalid parameter : {name}");
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs
index 13b2a653..b2cb756f 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/Operation/internal/LoadWebRemotePackageManifestOperation.cs
@@ -88,7 +88,7 @@ namespace YooAsset
{
if (_deserializer == null)
{
- _deserializer = new DeserializeManifestOperation(_webDataRequestOp.Result);
+ _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestServices, _webDataRequestOp.Result);
_deserializer.StartOperation();
AddChildOperation(_deserializer);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
index a910c202..149d6c6b 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
@@ -61,6 +61,11 @@ namespace YooAsset
/// 自定义参数:解密方法类
///
public IWebDecryptionServices DecryptionServices { private set; get; }
+
+ ///
+ /// 自定义参数:资源清单服务类
+ ///
+ public IManifestServices ManifestServices { private set; get; }
#endregion
@@ -116,6 +121,10 @@ namespace YooAsset
{
DecryptionServices = (IWebDecryptionServices)value;
}
+ else if (name == FileSystemParametersDefine.MANIFEST_SERVICES)
+ {
+ ManifestServices = (IManifestServices)value;
+ }
else
{
YooLogger.Warning($"Invalid parameter : {name}");
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/DWSFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/DWSFSInitializeOperation.cs
index ae2a5dc9..79c4daab 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/DWSFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/DWSFSInitializeOperation.cs
@@ -33,10 +33,11 @@ namespace YooAsset
if (_loadCatalogFileOp == null)
{
#if UNITY_EDITOR
+ /*
// 兼容性初始化
// 说明:内置文件系统在编辑器下运行时需要动态生成
string packageRoot = _fileSystem.FileRoot;
- bool result = DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.PackageName, packageRoot);
+ bool result = DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.ManifestServices, _fileSystem.PackageName, packageRoot);
if (result == false)
{
_steps = ESteps.Done;
@@ -44,6 +45,7 @@ namespace YooAsset
Error = $"Create package catalog file failed ! See the detail error in console !";
return;
}
+ */
#endif
_loadCatalogFileOp = new LoadWebServerCatalogFileOperation(_fileSystem);
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/internal/LoadWebServerPackageManifestOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/internal/LoadWebServerPackageManifestOperation.cs
index e727b86a..0dbce2d2 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/internal/LoadWebServerPackageManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/internal/LoadWebServerPackageManifestOperation.cs
@@ -85,7 +85,7 @@ namespace YooAsset
{
if (_deserializer == null)
{
- _deserializer = new DeserializeManifestOperation(_webDataRequestOp.Result);
+ _deserializer = new DeserializeManifestOperation(_fileSystem.ManifestServices, _webDataRequestOp.Result);
_deserializer.StartOperation();
AddChildOperation(_deserializer);
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs b/Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs
index 6c61693f..9985afc2 100644
--- a/Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/FileSystemParametersDefine.cs
@@ -7,6 +7,7 @@ namespace YooAsset
public const string INSTALL_CLEAR_MODE = "INSTALL_CLEAR_MODE";
public const string REMOTE_SERVICES = "REMOTE_SERVICES";
public const string DECRYPTION_SERVICES = "DECRYPTION_SERVICES";
+ public const string MANIFEST_SERVICES = "MANIFEST_SERVICES";
public const string APPEND_FILE_EXTENSION = "APPEND_FILE_EXTENSION";
public const string DISABLE_CATALOG_FILE = "DISABLE_CATALOG_FILE";
public const string DISABLE_UNITY_WEB_CACHE = "DISABLE_UNITY_WEB_CACHE";
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs b/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
index 2890aea6..e7f71754 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
@@ -44,7 +44,7 @@ namespace YooAsset
///
/// 序列化(二进制文件)
///
- public static void SerializeToBinary(string savePath, PackageManifest manifest)
+ public static void SerializeToBinary(string savePath, PackageManifest manifest, IManifestServices services)
{
using (FileStream fs = new FileStream(savePath, FileMode.Create))
{
@@ -96,9 +96,20 @@ namespace YooAsset
buffer.WriteInt32Array(packageBundle.DependBundleIDs);
}
- // 写入文件流
- buffer.WriteToStream(fs);
- fs.Flush();
+ // 清单处理操作
+ if (services != null)
+ {
+ var tempBytes = buffer.GetBytes();
+ var resultBytes = services.ProcessManifest(tempBytes);
+ fs.Write(resultBytes, 0, resultBytes.Length);
+ fs.Flush();
+ }
+ else
+ {
+ // 写入文件流
+ buffer.WriteToStream(fs);
+ fs.Flush();
+ }
}
}
@@ -113,10 +124,19 @@ namespace YooAsset
///
/// 反序列化(二进制文件)
///
- public static PackageManifest DeserializeFromBinary(byte[] binaryData)
+ public static PackageManifest DeserializeFromBinary(byte[] binaryData, IManifestServices services)
{
// 创建缓存器
- BufferReader buffer = new BufferReader(binaryData);
+ BufferReader buffer;
+ if (services != null)
+ {
+ var resultBytes = services.RestoreManifest(binaryData);
+ buffer = new BufferReader(resultBytes);
+ }
+ else
+ {
+ buffer = new BufferReader(binaryData);
+ }
// 读取文件标记
uint fileSign = buffer.ReadUInt32();
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
index 824854a2..50689ea9 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
@@ -10,6 +10,7 @@ namespace YooAsset
private enum ESteps
{
None,
+ RestoreFileData,
DeserializeFileHeader,
PrepareAssetList,
DeserializeAssetList,
@@ -19,7 +20,9 @@ namespace YooAsset
Done,
}
- private readonly BufferReader _buffer;
+ private readonly IManifestServices _services;
+ private byte[] _sourceData;
+ private BufferReader _buffer;
private int _packageAssetCount;
private int _packageBundleCount;
private int _progressTotalValue;
@@ -30,13 +33,14 @@ namespace YooAsset
///
public PackageManifest Manifest { private set; get; }
- public DeserializeManifestOperation(byte[] binaryData)
+ public DeserializeManifestOperation(IManifestServices services, byte[] binaryData)
{
- _buffer = new BufferReader(binaryData);
+ _services = services;
+ _sourceData = binaryData;
}
internal override void InternalStart()
{
- _steps = ESteps.DeserializeFileHeader;
+ _steps = ESteps.RestoreFileData;
}
internal override void InternalUpdate()
{
@@ -45,6 +49,19 @@ namespace YooAsset
try
{
+ if (_steps == ESteps.RestoreFileData)
+ {
+ if (_services != null)
+ {
+ var resultData = _services.RestoreManifest(_sourceData);
+ if (resultData != null)
+ _sourceData = resultData;
+ }
+
+ _buffer = new BufferReader(_sourceData);
+ _steps = ESteps.DeserializeFileHeader;
+ }
+
if (_steps == ESteps.DeserializeFileHeader)
{
if (_buffer.IsValid == false)
diff --git a/Assets/YooAsset/Runtime/Services/IManifestServices.cs b/Assets/YooAsset/Runtime/Services/IManifestServices.cs
new file mode 100644
index 00000000..0b7c65d1
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Services/IManifestServices.cs
@@ -0,0 +1,19 @@
+
+namespace YooAsset
+{
+ ///
+ /// 资源清单文件处理服务接口
+ ///
+ public interface IManifestServices
+ {
+ ///
+ /// 处理资源清单(压缩和加密)
+ ///
+ byte[] ProcessManifest(byte[] fileData);
+
+ ///
+ /// 还原资源清单(解压和解密)
+ ///
+ byte[] RestoreManifest(byte[] fileData);
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/Services/IManifestServices.cs.meta b/Assets/YooAsset/Runtime/Services/IManifestServices.cs.meta
new file mode 100644
index 00000000..28a5906d
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Services/IManifestServices.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7378f37c14fe59b4dbb5c1259a3f19c8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/Utility/BufferWriter.cs b/Assets/YooAsset/Runtime/Utility/BufferWriter.cs
index 553b62fe..f1acec27 100644
--- a/Assets/YooAsset/Runtime/Utility/BufferWriter.cs
+++ b/Assets/YooAsset/Runtime/Utility/BufferWriter.cs
@@ -36,6 +36,16 @@ namespace YooAsset
_index = 0;
}
+ ///
+ /// 获取有效数据
+ ///
+ public byte[] GetBytes()
+ {
+ byte[] newArray = new byte[_index];
+ Buffer.BlockCopy(_buffer, 0, newArray, 0, _index);
+ return newArray;
+ }
+
///
/// 将有效数据写入文件流
///