diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs index 4aee18d5..48fb8f04 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilderSetting.cs @@ -89,5 +89,17 @@ namespace YooAsset.Editor string key = $"{Application.productName}_{packageName}_{buildPipeline}_ClearBuildCache"; EditorPrefs.SetInt(key, clearBuildCache ? 1 : 0); } + + // UseAssetDependencyDB + public static bool GetPackageUseAssetDependencyDB(string packageName, EBuildPipeline buildPipeline) + { + string key = $"{Application.productName}_{packageName}_{buildPipeline}_UseAssetDependencyDB"; + return EditorPrefs.GetInt(key, 0) > 0; + } + public static void SetPackageUseAssetDependencyDB(string packageName, EBuildPipeline buildPipeline, bool useAssetDependencyDB) + { + string key = $"{Application.productName}_{packageName}_{buildPipeline}_UseAssetDependencyDB"; + EditorPrefs.SetInt(key, useAssetDependencyDB ? 1 : 0); + } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs index c5707ae7..5674d327 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs @@ -50,7 +50,13 @@ namespace YooAsset.Editor /// 清空构建缓存文件 /// public bool ClearBuildCacheFiles = false; - + + /// + /// 使用资源依赖缓存数据库 + /// 说明:开启此项可以极大提高资源收集速度 + /// + public bool UseAssetDependencyDB = false; + /// /// 启用共享资源打包 /// diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs index 3a8cafd7..974f8d8f 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateManifest.cs @@ -137,6 +137,9 @@ namespace YooAsset.Editor result.Add(packageAsset); } } + + // 按照AssetPath排序 + result.Sort((a, b) => a.AssetPath.CompareTo(b.AssetPath)); return result; } @@ -151,6 +154,9 @@ namespace YooAsset.Editor var packageBundle = bundleInfo.CreatePackageBundle(); result.Add(packageBundle); } + + // 按照BundleName排序 + result.Sort((a, b) => a.BundleName.CompareTo(b.BundleName)); // 注意:缓存资源包索引 for (int index = 0; index < result.Count; index++) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs index b9cfb833..6a480ec0 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskCreateReport.cs @@ -42,6 +42,7 @@ namespace YooAsset.Editor // 构建参数 buildReport.Summary.ClearBuildCacheFiles = buildParameters.ClearBuildCacheFiles; + buildReport.Summary.UseAssetDependencyDB = buildParameters.UseAssetDependencyDB; buildReport.Summary.EnableSharePackRule = buildParameters.EnableSharePackRule; buildReport.Summary.EncryptionClassName = buildParameters.EncryptionServices == null ? "null" : buildParameters.EncryptionServices.GetType().FullName; if (buildParameters.BuildPipeline == nameof(BuiltinBuildPipeline)) @@ -131,6 +132,7 @@ namespace YooAsset.Editor string dependBundleName = manifest.BundleList[index].BundleName; dependBundles.Add(dependBundleName); } + dependBundles.Sort(); return dependBundles; } @@ -160,6 +162,7 @@ namespace YooAsset.Editor result.Add(dependAssetInfo.AssetInfo.AssetPath); } } + result.Sort(); return result; } @@ -169,7 +172,9 @@ namespace YooAsset.Editor private List GetAllBuiltinAssets(BuildMapContext buildMapContext, string bundleName) { var bundleInfo = buildMapContext.GetBundleInfo(bundleName); - return bundleInfo.GetAllBuiltinAssetPaths(); + List result = bundleInfo.GetAllBuiltinAssetPaths(); + result.Sort(); + return result; } private int GetMainAssetCount(PackageManifest manifest) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs index 06ebfda2..1371506c 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs @@ -20,7 +20,8 @@ namespace YooAsset.Editor Dictionary allBuildAssetInfos = new Dictionary(1000); // 1. 获取所有收集器收集的资源 - var collectResult = AssetBundleCollectorSettingData.Setting.GetPackageAssets(simulateBuild, packageName); + bool useAssetDependencyDB = buildParameters.UseAssetDependencyDB; + var collectResult = AssetBundleCollectorSettingData.Setting.GetPackageAssets(simulateBuild, useAssetDependencyDB, packageName); List allCollectAssets = collectResult.CollectAssets; // 2. 剔除未被引用的依赖项资源 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs index 183d149f..cf5a86bf 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/BuildPipelineViewerBase.cs @@ -28,6 +28,7 @@ namespace YooAsset.Editor private EnumField _copyBuildinFileOptionField; private TextField _copyBuildinFileTagsField; private Toggle _clearBuildCacheToggle; + private Toggle _useAssetDependencyDBToggle; public BuildPipelineViewerBase(string packageName, EBuildPipeline buildPipeline, BuildTarget buildTarget, VisualElement parent) { @@ -140,6 +141,15 @@ namespace YooAsset.Editor AssetBundleBuilderSetting.SetPackageClearBuildCache(PackageName, BuildPipeline, _clearBuildCacheToggle.value); }); + // 使用资源依赖数据库 + bool useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(PackageName, BuildPipeline); + _useAssetDependencyDBToggle = Root.Q("UseAssetDependency"); + _useAssetDependencyDBToggle.SetValueWithoutNotify(useAssetDependencyDB); + _useAssetDependencyDBToggle.RegisterValueChangedCallback(evt => + { + AssetBundleBuilderSetting.SetPackageUseAssetDependencyDB(PackageName, BuildPipeline, _useAssetDependencyDBToggle.value); + }); + // 构建按钮 var buildButton = Root.Q