diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs
index 4f1948b1..3bb0ad7b 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs
@@ -79,15 +79,27 @@ namespace YooAsset.Editor
EditorPrefs.SetString(key, encyptionClassName);
}
- // ManifestServicesClassName
- public static string GetPackageManifestServicesClassName(string packageName, string buildPipeline)
+ // ManifestProcessServicesClassName
+ public static string GetPackageManifestProcessServicesClassName(string packageName, string buildPipeline)
{
- string key = $"{Application.productName}_{packageName}_{buildPipeline}_ManifestServicesClassName";
- return EditorPrefs.GetString(key, $"{typeof(ManifestNone).FullName}");
+ string key = $"{Application.productName}_{packageName}_{buildPipeline}_ManifestProcessServicesClassName";
+ return EditorPrefs.GetString(key, $"{typeof(ManifestProcessNone).FullName}");
}
- public static void SetPackageManifestServicesClassName(string packageName, string buildPipeline, string encyptionClassName)
+ public static void SetPackageManifestProcessServicesClassName(string packageName, string buildPipeline, string encyptionClassName)
{
- string key = $"{Application.productName}_{packageName}_{buildPipeline}_ManifestServicesClassName";
+ string key = $"{Application.productName}_{packageName}_{buildPipeline}_ManifestProcessServicesClassName";
+ EditorPrefs.SetString(key, encyptionClassName);
+ }
+
+ // ManifestRestoreServicesClassName
+ public static string GetPackageManifestRestoreServicesClassName(string packageName, string buildPipeline)
+ {
+ string key = $"{Application.productName}_{packageName}_{buildPipeline}_ManifestRestoreServicesClassName";
+ return EditorPrefs.GetString(key, $"{typeof(ManifestRestoreNone).FullName}");
+ }
+ public static void SetPackageManifestRestoreServicesClassName(string packageName, string buildPipeline, string encyptionClassName)
+ {
+ string key = $"{Application.productName}_{packageName}_{buildPipeline}_ManifestRestoreServicesClassName";
EditorPrefs.SetString(key, encyptionClassName);
}
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
index 58938c4f..95db7e3c 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs
@@ -99,10 +99,14 @@ namespace YooAsset.Editor
public IEncryptionServices EncryptionServices;
///
- /// 资源清单服务类
+ /// 资源清单加密服务类
///
- public IManifestServices ManifestServices;
+ public IManifestProcessServices ManifestProcessServices;
+ ///
+ /// 资源清单解密服务类
+ ///
+ public IManifestRestoreServices ManifestRestoreServices;
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 03b8af32..e408a20e 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateCatalog.cs
@@ -14,8 +14,8 @@ namespace YooAsset.Editor
{
string buildinRootDirectory = buildParametersContext.GetBuildinRootDirectory();
string buildPackageName = buildParametersContext.Parameters.PackageName;
- var manifestServices = buildParametersContext.Parameters.ManifestServices;
- DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(manifestServices, buildPackageName, buildinRootDirectory);
+ var manifestServices = buildParametersContext.Parameters.ManifestRestoreServices;
+ CatalogTools.CreateCatalogFile(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 5d5c6e62..d0e6efd1 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs
@@ -72,7 +72,7 @@ namespace YooAsset.Editor
{
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(buildParameters.PackageName, buildParameters.PackageVersion);
packagePath = $"{packageOutputDirectory}/{fileName}";
- ManifestTools.SerializeToBinary(packagePath, manifest, buildParameters.ManifestServices);
+ ManifestTools.SerializeToBinary(packagePath, manifest, buildParameters.ManifestProcessServices);
packageHash = HashUtility.FileCRC32(packagePath);
BuildLogger.Log($"Create package manifest file: {packagePath}");
}
@@ -97,7 +97,7 @@ namespace YooAsset.Editor
{
ManifestContext manifestContext = new ManifestContext();
byte[] bytesData = FileUtility.ReadAllBytes(packagePath);
- manifestContext.Manifest = ManifestTools.DeserializeFromBinary(bytesData, buildParameters.ManifestServices);
+ manifestContext.Manifest = ManifestTools.DeserializeFromBinary(bytesData, buildParameters.ManifestRestoreServices);
context.SetContextObject(manifestContext);
}
}
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
index 79bf4f5d..7c1e5ce0 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs
@@ -44,7 +44,9 @@ namespace YooAsset.Editor
buildReport.Summary.SingleReferencedPackAlone = buildParameters.SingleReferencedPackAlone;
buildReport.Summary.FileNameStyle = buildParameters.FileNameStyle;
buildReport.Summary.EncryptionServicesClassName = buildParameters.EncryptionServices == null ? "null" : buildParameters.EncryptionServices.GetType().FullName;
- buildReport.Summary.ManifestServicesClassName = buildParameters.ManifestServices == null ? "null" : buildParameters.ManifestServices.GetType().FullName;
+ buildReport.Summary.ManifestProcessServicesClassName = buildParameters.ManifestProcessServices == null ? "null" : buildParameters.ManifestProcessServices.GetType().FullName;
+ buildReport.Summary.ManifestRestoreServicesClassName = buildParameters.ManifestRestoreServices == null ? "null" : buildParameters.ManifestRestoreServices.GetType().FullName;
+
if (buildParameters is BuiltinBuildParameters)
{
var builtinBuildParameters = buildParameters as BuiltinBuildParameters;
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs
index 62ebc1ea..e423d246 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/DefaultManifestServices.cs
@@ -1,13 +1,17 @@
namespace YooAsset.Editor
{
- public class ManifestNone : IManifestServices
+ public class ManifestProcessNone : IManifestProcessServices
{
- public byte[] ProcessManifest(byte[] fileData)
+ byte[] IManifestProcessServices.ProcessManifest(byte[] fileData)
{
return fileData;
}
- public byte[] RestoreManifest(byte[] fileData)
+ }
+
+ public class ManifestRestoreNone : IManifestRestoreServices
+ {
+ byte[] IManifestRestoreServices.RestoreManifest(byte[] fileData)
{
return fileData;
}
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs
index dce8b86b..4b65e3b5 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs
@@ -44,7 +44,7 @@ namespace YooAsset.Editor
}
///
- /// 创建资源加密服务类实例
+ /// 创建资源包加密服务类实例
///
protected IEncryptionServices CreateEncryptionServicesInstance()
{
@@ -58,15 +58,29 @@ namespace YooAsset.Editor
}
///
- /// 创建资源清单服务类实例
+ /// 创建资源清单加密服务类实例
///
- protected IManifestServices CreateManifestServicesInstance()
+ protected IManifestProcessServices CreateManifestProcessServicesInstance()
{
- var className = AssetBundleBuilderSetting.GetPackageManifestServicesClassName(PackageName, PipelineName);
- var classTypes = EditorTools.GetAssignableTypes(typeof(IManifestServices));
+ var className = AssetBundleBuilderSetting.GetPackageManifestProcessServicesClassName(PackageName, PipelineName);
+ var classTypes = EditorTools.GetAssignableTypes(typeof(IManifestProcessServices));
var classType = classTypes.Find(x => x.FullName.Equals(className));
if (classType != null)
- return (IManifestServices)Activator.CreateInstance(classType);
+ return (IManifestProcessServices)Activator.CreateInstance(classType);
+ else
+ return null;
+ }
+
+ ///
+ /// 创建资源清单解密服务类实例
+ ///
+ protected IManifestRestoreServices CreateManifestRestoreServicesInstance()
+ {
+ var className = AssetBundleBuilderSetting.GetPackageManifestRestoreServicesClassName(PackageName, PipelineName);
+ var classTypes = EditorTools.GetAssignableTypes(typeof(IManifestRestoreServices));
+ var classType = classTypes.Find(x => x.FullName.Equals(className));
+ if (classType != null)
+ return (IManifestRestoreServices)Activator.CreateInstance(classType);
else
return null;
}
@@ -169,7 +183,7 @@ namespace YooAsset.Editor
}
protected PopupField CreateEncryptionServicesField(VisualElement container)
{
- // 加密服务类
+ // 资源包加密服务类
var classTypes = EditorTools.GetAssignableTypes(typeof(IEncryptionServices));
if (classTypes.Count > 0)
{
@@ -198,22 +212,22 @@ namespace YooAsset.Editor
return popupField;
}
}
- protected PopupField CreateManifestServicesField(VisualElement container)
+ protected PopupField CreateManifestProcessServicesField(VisualElement container)
{
- // 清单服务类
- var classTypes = EditorTools.GetAssignableTypes(typeof(IManifestServices));
+ // 资源清单加密服务类
+ var classTypes = EditorTools.GetAssignableTypes(typeof(IManifestProcessServices));
if (classTypes.Count > 0)
{
- var className = AssetBundleBuilderSetting.GetPackageManifestServicesClassName(PackageName, PipelineName);
+ var className = AssetBundleBuilderSetting.GetPackageManifestProcessServicesClassName(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.label = "Manifest Process Services";
popupField.style.width = StyleWidth;
popupField.RegisterValueChangedCallback(evt =>
{
- AssetBundleBuilderSetting.SetPackageManifestServicesClassName(PackageName, PipelineName, popupField.value.FullName);
+ AssetBundleBuilderSetting.SetPackageManifestProcessServicesClassName(PackageName, PipelineName, popupField.value.FullName);
});
container.Add(popupField);
UIElementsTools.SetElementLabelMinWidth(popupField, LabelMinWidth);
@@ -222,7 +236,38 @@ namespace YooAsset.Editor
else
{
var popupField = new PopupField();
- popupField.label = "Manifest Services";
+ popupField.label = "Manifest Process Services";
+ popupField.style.width = StyleWidth;
+ container.Add(popupField);
+ UIElementsTools.SetElementLabelMinWidth(popupField, LabelMinWidth);
+ return popupField;
+ }
+ }
+ protected PopupField CreateManifestRestoreServicesField(VisualElement container)
+ {
+ // 资源清单加密服务类
+ var classTypes = EditorTools.GetAssignableTypes(typeof(IManifestRestoreServices));
+ if (classTypes.Count > 0)
+ {
+ var className = AssetBundleBuilderSetting.GetPackageManifestRestoreServicesClassName(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 Restore Services";
+ popupField.style.width = StyleWidth;
+ popupField.RegisterValueChangedCallback(evt =>
+ {
+ AssetBundleBuilderSetting.SetPackageManifestRestoreServicesClassName(PackageName, PipelineName, popupField.value.FullName);
+ });
+ container.Add(popupField);
+ UIElementsTools.SetElementLabelMinWidth(popupField, LabelMinWidth);
+ return popupField;
+ }
+ else
+ {
+ var popupField = new PopupField();
+ popupField.label = "Manifest Restore Services";
popupField.style.width = StyleWidth;
container.Add(popupField);
UIElementsTools.SetElementLabelMinWidth(popupField, LabelMinWidth);
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.cs
index e1004451..df39d4e4 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuiltinBuildPipeline/BuiltinBuildPipelineViewer.cs
@@ -17,7 +17,8 @@ namespace YooAsset.Editor
protected TextField _buildOutputField;
protected TextField _buildVersionField;
protected PopupField _encryptionServicesField;
- protected PopupField _manifestServicesField;
+ protected PopupField _manifestProcessServicesField;
+ protected PopupField _manifestRestoreServicesField;
protected EnumField _compressionField;
protected EnumField _outputNameStyleField;
protected EnumField _copyBuildinFileOptionField;
@@ -47,7 +48,8 @@ namespace YooAsset.Editor
// 服务类
var popupContainer = Root.Q("PopupContainer");
_encryptionServicesField = CreateEncryptionServicesField(popupContainer);
- _manifestServicesField = CreateManifestServicesField(popupContainer);
+ _manifestProcessServicesField = CreateManifestProcessServicesField(popupContainer);
+ _manifestRestoreServicesField = CreateManifestRestoreServicesField(popupContainer);
// 压缩方式选项
_compressionField = Root.Q("Compression");
@@ -120,7 +122,8 @@ namespace YooAsset.Editor
buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
buildParameters.EncryptionServices = CreateEncryptionServicesInstance();
- buildParameters.ManifestServices = CreateManifestServicesInstance();
+ buildParameters.ManifestProcessServices = CreateManifestProcessServicesInstance();
+ buildParameters.ManifestRestoreServices = CreateManifestRestoreServicesInstance();
BuiltinBuildPipeline pipeline = new BuiltinBuildPipeline();
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 300a1929..2383d14b 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/RawfileBuildpipeline/RawfileBuildPipelineViewer.cs
@@ -17,7 +17,8 @@ namespace YooAsset.Editor
protected TextField _buildOutputField;
protected TextField _buildVersionField;
protected PopupField _encryptionServicesField;
- protected PopupField _manifestServicesField;
+ protected PopupField _manifestProcessServicesField;
+ protected PopupField _manifestRestoreServicesField;
protected EnumField _outputNameStyleField;
protected EnumField _copyBuildinFileOptionField;
protected TextField _copyBuildinFileTagsField;
@@ -46,7 +47,8 @@ namespace YooAsset.Editor
// 加密方法
var popupContainer = Root.Q("PopupContainer");
_encryptionServicesField = CreateEncryptionServicesField(popupContainer);
- _manifestServicesField = CreateManifestServicesField(popupContainer);
+ _manifestProcessServicesField = CreateManifestProcessServicesField(popupContainer);
+ _manifestRestoreServicesField = CreateManifestRestoreServicesField(popupContainer);
// 输出文件名称样式
_outputNameStyleField = Root.Q("FileNameStyle");
@@ -112,7 +114,8 @@ namespace YooAsset.Editor
buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
buildParameters.EncryptionServices = CreateEncryptionServicesInstance();
- buildParameters.ManifestServices = CreateManifestServicesInstance();
+ buildParameters.ManifestProcessServices = CreateManifestProcessServicesInstance();
+ buildParameters.ManifestRestoreServices = CreateManifestRestoreServicesInstance();
RawFileBuildPipeline pipeline = new RawFileBuildPipeline();
var buildResult = pipeline.Run(buildParameters, true);
diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.cs
index 99f38921..0cdcca38 100644
--- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipeline/ScriptableBuildPipelineViewer.cs
@@ -17,7 +17,8 @@ namespace YooAsset.Editor
protected TextField _buildOutputField;
protected TextField _buildVersionField;
protected PopupField _encryptionServicesField;
- protected PopupField _manifestServicesField;
+ protected PopupField _manifestProcessServicesField;
+ protected PopupField _manifestRestoreServicesField;
protected EnumField _compressionField;
protected EnumField _outputNameStyleField;
protected EnumField _copyBuildinFileOptionField;
@@ -47,7 +48,8 @@ namespace YooAsset.Editor
// 加密方法
var popupContainer = Root.Q("PopupContainer");
_encryptionServicesField = CreateEncryptionServicesField(popupContainer);
- _manifestServicesField = CreateManifestServicesField(popupContainer);
+ _manifestProcessServicesField = CreateManifestProcessServicesField(popupContainer);
+ _manifestRestoreServicesField = CreateManifestRestoreServicesField(popupContainer);
// 压缩方式选项
_compressionField = Root.Q("Compression");
@@ -122,7 +124,8 @@ namespace YooAsset.Editor
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
buildParameters.BuiltinShadersBundleName = builtinShaderBundleName;
buildParameters.EncryptionServices = CreateEncryptionServicesInstance();
- buildParameters.ManifestServices = CreateManifestServicesInstance();
+ buildParameters.ManifestProcessServices = CreateManifestProcessServicesInstance();
+ buildParameters.ManifestRestoreServices = CreateManifestRestoreServicesInstance();
ScriptableBuildPipeline pipeline = new ScriptableBuildPipeline();
var buildResult = pipeline.Run(buildParameters, true);
diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs b/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
index 893f43f9..1730d852 100644
--- a/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
+++ b/Assets/YooAsset/Editor/AssetBundleReporter/ReportSummary.cs
@@ -72,7 +72,8 @@ namespace YooAsset.Editor
public bool EnableSharePackRule;
public bool SingleReferencedPackAlone;
public string EncryptionServicesClassName;
- public string ManifestServicesClassName;
+ public string ManifestProcessServicesClassName;
+ public string ManifestRestoreServicesClassName;
public EFileNameStyle FileNameStyle;
// 引擎参数
diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
index 5f44e1bd..e34672a4 100644
--- a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
+++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/ReporterSummaryViewer.cs
@@ -67,7 +67,8 @@ namespace YooAsset.Editor
BindListViewItem("Enable Share Pack Rule", $"{buildReport.Summary.EnableSharePackRule}");
BindListViewItem("Single Referenced Pack Alone", $"{buildReport.Summary.SingleReferencedPackAlone}");
BindListViewItem("Encryption Services", buildReport.Summary.EncryptionServicesClassName);
- BindListViewItem("Manifest Services", buildReport.Summary.ManifestServicesClassName);
+ BindListViewItem("Manifest Process Services", buildReport.Summary.ManifestProcessServicesClassName);
+ BindListViewItem("Manifest Restore Services", buildReport.Summary.ManifestRestoreServicesClassName);
BindListViewItem("FileNameStyle", $"{buildReport.Summary.FileNameStyle}");
BindListViewItem("CompressOption", $"{buildReport.Summary.CompressOption}");
BindListViewItem("DisableWriteTypeTree", $"{buildReport.Summary.DisableWriteTypeTree}");
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/CatalogTools.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/CatalogTools.cs
index 0d45e132..1b96888d 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/CatalogTools.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/CatalogTools.cs
@@ -7,6 +7,114 @@ namespace YooAsset
{
internal static class CatalogTools
{
+#if UNITY_EDITOR
+ ///
+ /// 生成包裹的内置资源目录文件
+ /// 说明:根据指定目录下的文件生成清单文件。
+ ///
+ public static bool CreateCatalogFile(IManifestRestoreServices services, string packageName, string packageDirectory)
+ {
+ // 获取资源清单版本
+ string packageVersion;
+ {
+ string versionFileName = YooAssetSettingsData.GetPackageVersionFileName(packageName);
+ string versionFilePath = $"{packageDirectory}/{versionFileName}";
+ if (File.Exists(versionFilePath) == false)
+ {
+ Debug.LogError($"Can not found package version file : {versionFilePath}");
+ return false;
+ }
+
+ packageVersion = FileUtility.ReadAllText(versionFilePath);
+ }
+
+ // 加载资源清单文件
+ PackageManifest packageManifest;
+ {
+ string manifestFileName = YooAssetSettingsData.GetManifestBinaryFileName(packageName, packageVersion);
+ string manifestFilePath = $"{packageDirectory}/{manifestFileName}";
+ if (File.Exists(manifestFilePath) == false)
+ {
+ Debug.LogError($"Can not found package manifest file : {manifestFilePath}");
+ return false;
+ }
+
+ var binaryData = FileUtility.ReadAllBytes(manifestFilePath);
+ packageManifest = ManifestTools.DeserializeFromBinary(binaryData, services);
+ }
+
+ // 获取文件名映射关系
+ Dictionary fileMapping = new Dictionary();
+ {
+ foreach (var packageBundle in packageManifest.BundleList)
+ {
+ fileMapping.Add(packageBundle.FileName, packageBundle.BundleGUID);
+ }
+ }
+
+ // 创建内置清单实例
+ var buildinFileCatalog = new DefaultBuildinFileCatalog();
+ buildinFileCatalog.FileVersion = CatalogDefine.FileVersion;
+ buildinFileCatalog.PackageName = packageName;
+ buildinFileCatalog.PackageVersion = packageVersion;
+
+ // 创建白名单查询集合
+ HashSet whiteFileList = new HashSet
+ {
+ "link.xml",
+ "buildlogtep.json",
+ $"{packageName}.version",
+ $"{packageName}_{packageVersion}.bytes",
+ $"{packageName}_{packageVersion}.hash",
+ $"{packageName}_{packageVersion}.json",
+ $"{packageName}_{packageVersion}.report",
+ DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName,
+ DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName
+ };
+
+ // 记录所有内置资源文件
+ DirectoryInfo rootDirectory = new DirectoryInfo(packageDirectory);
+ FileInfo[] fileInfos = rootDirectory.GetFiles();
+ foreach (var fileInfo in fileInfos)
+ {
+ if (fileInfo.Extension == ".meta")
+ continue;
+
+ if (whiteFileList.Contains(fileInfo.Name))
+ continue;
+
+ string fileName = fileInfo.Name;
+ if (fileMapping.TryGetValue(fileName, out string bundleGUID))
+ {
+ var wrapper = new DefaultBuildinFileCatalog.FileWrapper();
+ wrapper.BundleGUID = bundleGUID;
+ wrapper.FileName = fileName;
+ buildinFileCatalog.Wrappers.Add(wrapper);
+ }
+ else
+ {
+ Debug.LogWarning($"Failed mapping file : {fileName}");
+ }
+ }
+
+ // 创建输出文件
+ string jsonFilePath = $"{packageDirectory}/{DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName}";
+ if (File.Exists(jsonFilePath))
+ File.Delete(jsonFilePath);
+ SerializeToJson(jsonFilePath, buildinFileCatalog);
+
+ // 创建输出文件
+ string binaryFilePath = $"{packageDirectory}/{DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName}";
+ if (File.Exists(binaryFilePath))
+ File.Delete(binaryFilePath);
+ SerializeToBinary(binaryFilePath, buildinFileCatalog);
+
+ UnityEditor.AssetDatabase.Refresh();
+ Debug.Log($"Succeed to save catalog file : {binaryFilePath}");
+ return true;
+ }
+#endif
+
///
/// 序列化(JSON文件)
///
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
index 61e2800b..751e767a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
@@ -92,7 +92,7 @@ namespace YooAsset
///
/// 自定义参数:资源清单服务类
///
- public IManifestServices ManifestServices { private set; get; }
+ public IManifestRestoreServices ManifestServices { private set; get; }
///
/// 自定义参数:拷贝内置文件服务类
@@ -186,7 +186,7 @@ namespace YooAsset
}
else if (name == FileSystemParametersDefine.MANIFEST_SERVICES)
{
- ManifestServices = (IManifestServices)value;
+ ManifestServices = (IManifestRestoreServices)value;
}
else if (name == FileSystemParametersDefine.COPY_LOCAL_FILE_SERVICES)
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
deleted file mode 100644
index 957dd678..00000000
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
+++ /dev/null
@@ -1,155 +0,0 @@
-#if UNITY_EDITOR
-using System.Collections.Generic;
-using System.IO;
-using UnityEngine;
-
-namespace YooAsset
-{
- public class DefaultBuildinFileSystemBuild : UnityEditor.Build.IPreprocessBuildWithReport
- {
- public int callbackOrder { get { return 0; } }
-
- ///
- /// 在构建应用程序前自动生成内置资源目录文件。
- /// 原理:搜索StreamingAssets目录下的所有资源文件,将这些文件信息写入文件,然后在运行时做查询用途。
- ///
- public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
- {
- YooLogger.Log("Begin to create catalog file !");
-
- string rootPath = YooAssetSettingsData.GetYooDefaultBuildinRoot();
- DirectoryInfo rootDirectory = new DirectoryInfo(rootPath);
- if (rootDirectory.Exists == false)
- {
- Debug.LogWarning($"Can not found StreamingAssets root directory : {rootPath}");
- return;
- }
-
- // 搜索所有Package目录
- DirectoryInfo[] subDirectories = rootDirectory.GetDirectories();
- foreach (var subDirectory in subDirectories)
- {
- string packageName = subDirectory.Name;
- string pacakgeDirectory = subDirectory.FullName;
- try
- {
- 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}");
- }
- }
- }
-
- ///
- /// 生成包裹的内置资源目录文件
- ///
- public static bool CreateBuildinCatalogFile(IManifestServices services, string packageName, string packageDirectory)
- {
- // 获取资源清单版本
- string packageVersion;
- {
- string versionFileName = YooAssetSettingsData.GetPackageVersionFileName(packageName);
- string versionFilePath = $"{packageDirectory}/{versionFileName}";
- if (File.Exists(versionFilePath) == false)
- {
- Debug.LogError($"Can not found package version file : {versionFilePath}");
- return false;
- }
-
- packageVersion = FileUtility.ReadAllText(versionFilePath);
- }
-
- // 加载资源清单文件
- PackageManifest packageManifest;
- {
- string manifestFileName = YooAssetSettingsData.GetManifestBinaryFileName(packageName, packageVersion);
- string manifestFilePath = $"{packageDirectory}/{manifestFileName}";
- if (File.Exists(manifestFilePath) == false)
- {
- Debug.LogError($"Can not found package manifest file : {manifestFilePath}");
- return false;
- }
-
- var binaryData = FileUtility.ReadAllBytes(manifestFilePath);
- packageManifest = ManifestTools.DeserializeFromBinary(binaryData, services);
- }
-
- // 获取文件名映射关系
- Dictionary fileMapping = new Dictionary();
- {
- foreach (var packageBundle in packageManifest.BundleList)
- {
- fileMapping.Add(packageBundle.FileName, packageBundle.BundleGUID);
- }
- }
-
- // 创建内置清单实例
- var buildinFileCatalog = new DefaultBuildinFileCatalog();
- buildinFileCatalog.FileVersion = CatalogDefine.FileVersion;
- buildinFileCatalog.PackageName = packageName;
- buildinFileCatalog.PackageVersion = packageVersion;
-
- // 创建白名单查询集合
- HashSet whiteFileList = new HashSet
- {
- "link.xml",
- "buildlogtep.json",
- $"{packageName}.version",
- $"{packageName}_{packageVersion}.bytes",
- $"{packageName}_{packageVersion}.hash",
- $"{packageName}_{packageVersion}.json",
- $"{packageName}_{packageVersion}.report",
- DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName,
- DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName
- };
-
- // 记录所有内置资源文件
- DirectoryInfo rootDirectory = new DirectoryInfo(packageDirectory);
- FileInfo[] fileInfos = rootDirectory.GetFiles();
- foreach (var fileInfo in fileInfos)
- {
- if (fileInfo.Extension == ".meta")
- continue;
-
- if (whiteFileList.Contains(fileInfo.Name))
- continue;
-
- string fileName = fileInfo.Name;
- if (fileMapping.TryGetValue(fileName, out string bundleGUID))
- {
- var wrapper = new DefaultBuildinFileCatalog.FileWrapper();
- wrapper.BundleGUID = bundleGUID;
- wrapper.FileName = fileName;
- buildinFileCatalog.Wrappers.Add(wrapper);
- }
- else
- {
- Debug.LogWarning($"Failed mapping file : {fileName}");
- }
- }
-
- // 创建输出文件
- string jsonFilePath = $"{packageDirectory}/{DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName}";
- if (File.Exists(jsonFilePath))
- File.Delete(jsonFilePath);
- CatalogTools.SerializeToJson(jsonFilePath, buildinFileCatalog);
-
- // 创建输出文件
- string binaryFilePath = $"{packageDirectory}/{DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName}";
- if (File.Exists(binaryFilePath))
- File.Delete(binaryFilePath);
- CatalogTools.SerializeToBinary(binaryFilePath, buildinFileCatalog);
-
- UnityEditor.AssetDatabase.Refresh();
- Debug.Log($"Succeed to save buildin file catalog : {binaryFilePath}");
- return true;
- }
- }
-}
-#endif
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
index cc78c4f0..fa6ff31d 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
@@ -108,7 +108,7 @@ namespace YooAsset
///
/// 自定义参数:资源清单服务类
///
- public IManifestServices ManifestServices { private set; get; }
+ public IManifestRestoreServices ManifestServices { private set; get; }
///
/// 自定义参数:拷贝内置文件服务类
@@ -253,7 +253,7 @@ namespace YooAsset
}
else if (name == FileSystemParametersDefine.MANIFEST_SERVICES)
{
- ManifestServices = (IManifestServices)value;
+ ManifestServices = (IManifestRestoreServices)value;
}
else if (name == FileSystemParametersDefine.COPY_LOCAL_FILE_SERVICES)
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs
index e956ac3a..99e97cda 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs
@@ -56,7 +56,7 @@ namespace YooAsset
///
/// 自定义参数:资源清单服务类
///
- public IManifestServices ManifestServices { private set; get; }
+ public IManifestRestoreServices ManifestServices { private set; get; }
#endregion
@@ -118,7 +118,7 @@ namespace YooAsset
}
else if (name == FileSystemParametersDefine.MANIFEST_SERVICES)
{
- ManifestServices = (IManifestServices)value;
+ ManifestServices = (IManifestRestoreServices)value;
}
else
{
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
index 149d6c6b..0d2a211e 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
@@ -65,7 +65,7 @@ namespace YooAsset
///
/// 自定义参数:资源清单服务类
///
- public IManifestServices ManifestServices { private set; get; }
+ public IManifestRestoreServices ManifestServices { private set; get; }
#endregion
@@ -123,7 +123,7 @@ namespace YooAsset
}
else if (name == FileSystemParametersDefine.MANIFEST_SERVICES)
{
- ManifestServices = (IManifestServices)value;
+ ManifestServices = (IManifestRestoreServices)value;
}
else
{
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs b/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
index e7f71754..65729273 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, IManifestServices services)
+ public static void SerializeToBinary(string savePath, PackageManifest manifest, IManifestProcessServices services)
{
using (FileStream fs = new FileStream(savePath, FileMode.Create))
{
@@ -124,7 +124,7 @@ namespace YooAsset
///
/// 反序列化(二进制文件)
///
- public static PackageManifest DeserializeFromBinary(byte[] binaryData, IManifestServices services)
+ public static PackageManifest DeserializeFromBinary(byte[] binaryData, IManifestRestoreServices services)
{
// 创建缓存器
BufferReader buffer;
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
index 50689ea9..5ab3f406 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
@@ -20,7 +20,7 @@ namespace YooAsset
Done,
}
- private readonly IManifestServices _services;
+ private readonly IManifestRestoreServices _services;
private byte[] _sourceData;
private BufferReader _buffer;
private int _packageAssetCount;
@@ -33,7 +33,7 @@ namespace YooAsset
///
public PackageManifest Manifest { private set; get; }
- public DeserializeManifestOperation(IManifestServices services, byte[] binaryData)
+ public DeserializeManifestOperation(IManifestRestoreServices services, byte[] binaryData)
{
_services = services;
_sourceData = binaryData;
diff --git a/Assets/YooAsset/Runtime/Services/IManifestProcessServices.cs b/Assets/YooAsset/Runtime/Services/IManifestProcessServices.cs
new file mode 100644
index 00000000..76fd42ac
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Services/IManifestProcessServices.cs
@@ -0,0 +1,14 @@
+
+namespace YooAsset
+{
+ ///
+ /// 资源清单文件处理服务接口
+ ///
+ public interface IManifestProcessServices
+ {
+ ///
+ /// 处理资源清单(压缩或加密)
+ ///
+ byte[] ProcessManifest(byte[] fileData);
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/Services/IManifestServices.cs.meta b/Assets/YooAsset/Runtime/Services/IManifestProcessServices.cs.meta
similarity index 100%
rename from Assets/YooAsset/Runtime/Services/IManifestServices.cs.meta
rename to Assets/YooAsset/Runtime/Services/IManifestProcessServices.cs.meta
diff --git a/Assets/YooAsset/Runtime/Services/IManifestRestoreServices.cs b/Assets/YooAsset/Runtime/Services/IManifestRestoreServices.cs
new file mode 100644
index 00000000..4fc3599e
--- /dev/null
+++ b/Assets/YooAsset/Runtime/Services/IManifestRestoreServices.cs
@@ -0,0 +1,14 @@
+
+namespace YooAsset
+{
+ ///
+ /// 资源清单文件处理服务接口
+ ///
+ public interface IManifestRestoreServices
+ {
+ ///
+ /// 还原资源清单(解压或解密)
+ ///
+ byte[] RestoreManifest(byte[] fileData);
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs.meta b/Assets/YooAsset/Runtime/Services/IManifestRestoreServices.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs.meta
rename to Assets/YooAsset/Runtime/Services/IManifestRestoreServices.cs.meta
index 5400d792..4fd5c835 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs.meta
+++ b/Assets/YooAsset/Runtime/Services/IManifestRestoreServices.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 6b5abe115ebfe1344b674db78b2edf6c
+guid: b17060f9f11771e4cbcb0201fce446e6
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/Services/IManifestServices.cs b/Assets/YooAsset/Runtime/Services/IManifestServices.cs
deleted file mode 100644
index 0b7c65d1..00000000
--- a/Assets/YooAsset/Runtime/Services/IManifestServices.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-
-namespace YooAsset
-{
- ///
- /// 资源清单文件处理服务接口
- ///
- public interface IManifestServices
- {
- ///
- /// 处理资源清单(压缩和加密)
- ///
- byte[] ProcessManifest(byte[] fileData);
-
- ///
- /// 还原资源清单(解压和解密)
- ///
- byte[] RestoreManifest(byte[] fileData);
- }
-}
\ No newline at end of file