From 6571faae4e505f5b23b3a6385c093583cc44c717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Sat, 8 Feb 2025 10:09:52 +0800 Subject: [PATCH] update AssetBundleBuilder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ScriptableBuildParameters类新增BuiltinShadersBundleName和MonoScriptsBundleName字段 --- .../AssetBundleBuilder/BuildMapContext.cs | 12 +-- .../BaseTasks/TaskGetBuildMap.cs | 2 +- .../BuildTasks/TaskBuilding_SBP.cs | 18 ++-- .../ScriptableBuildPipeline/SBPBuildTasks.cs | 6 +- .../ScriptableBuildParameters.cs | 11 +++ .../ScriptableBuildPipelineViewer.cs | 13 +++ .../AssetBundleCollectorPackage.cs | 10 +- .../AssetBundleCollectorSetting.cs | 23 ++--- .../AssetBundleCollectorWindow.cs | 52 +++++----- .../AssetBundleCollectorWindow.uxml | 4 +- .../AssetBundleCollector/CollectCommand.cs | 96 ++++++++----------- .../AssetBundleCollector/CollectResult.cs | 5 +- 12 files changed, 133 insertions(+), 119 deletions(-) diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildMapContext.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildMapContext.cs index cfe0167d..e027e8d7 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildMapContext.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildMapContext.cs @@ -17,7 +17,7 @@ namespace YooAsset.Editor /// 未被依赖的资源列表 /// public readonly List IndependAssets = new List(1000); - + /// /// 参与构建的资源总数 /// 说明:包括主动收集的资源以及其依赖的所有资源 @@ -96,14 +96,14 @@ namespace YooAsset.Editor } /// - /// 创建着色器信息类 + /// 创建空的资源包 /// - public void CreateShadersBundleInfo(string shadersBundleName) + public void CreateEmptyBundleInfo(string bundleName) { - if (IsContainsBundle(shadersBundleName) == false) + if (IsContainsBundle(bundleName) == false) { - var shaderBundleInfo = new BuildBundleInfo(shadersBundleName); - _bundleInfoDic.Add(shadersBundleName, shaderBundleInfo); + var bundleInfo = new BuildBundleInfo(bundleName); + _bundleInfoDic.Add(bundleName, bundleInfo); } } } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs index 1371506c..fb7f638e 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/BaseTasks/TaskGetBuildMap.cs @@ -21,7 +21,7 @@ namespace YooAsset.Editor // 1. 获取所有收集器收集的资源 bool useAssetDependencyDB = buildParameters.UseAssetDependencyDB; - var collectResult = AssetBundleCollectorSettingData.Setting.GetPackageAssets(simulateBuild, useAssetDependencyDB, packageName); + var collectResult = AssetBundleCollectorSettingData.Setting.BeginCollect(packageName, simulateBuild, useAssetDependencyDB); List allCollectAssets = collectResult.CollectAssets; // 2. 剔除未被引用的依赖项资源 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs index e7e32ab6..fb716bcd 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/BuildTasks/TaskBuilding_SBP.cs @@ -27,7 +27,9 @@ namespace YooAsset.Editor // 开始构建 IBundleBuildResults buildResults; var buildParameters = scriptableBuildParameters.GetBundleBuildParameters(); - var taskList = SBPBuildTasks.Create(buildMapContext.Command.ShadersBundleName, null); + string builtinShadersBundleName = scriptableBuildParameters.BuiltinShadersBundleName; + string monoScriptsBundleName = scriptableBuildParameters.MonoScriptsBundleName; + var taskList = SBPBuildTasks.Create(builtinShadersBundleName, monoScriptsBundleName); ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParameters, buildContent, out buildResults, taskList); if (exitCode < 0) { @@ -35,13 +37,17 @@ namespace YooAsset.Editor throw new Exception(message); } - // 创建着色器信息 - // 说明:解决因为着色器资源包导致验证失败。 + // 说明:解决因为特殊资源包导致验证失败。 // 例如:当项目里没有着色器,如果有依赖内置着色器就会验证失败。 - string shadersBundleName = buildMapContext.Command.ShadersBundleName; - if (buildResults.BundleInfos.ContainsKey(shadersBundleName)) + if (string.IsNullOrEmpty(builtinShadersBundleName) == false) { - buildMapContext.CreateShadersBundleInfo(shadersBundleName); + if (buildResults.BundleInfos.ContainsKey(builtinShadersBundleName)) + buildMapContext.CreateEmptyBundleInfo(builtinShadersBundleName); + } + if (string.IsNullOrEmpty(monoScriptsBundleName) == false) + { + if (buildResults.BundleInfos.ContainsKey(monoScriptsBundleName)) + buildMapContext.CreateEmptyBundleInfo(monoScriptsBundleName); } BuildLogger.Log("UnityEngine build success!"); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/SBPBuildTasks.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/SBPBuildTasks.cs index 3314daa9..32cf5f5c 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/SBPBuildTasks.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/SBPBuildTasks.cs @@ -9,7 +9,7 @@ namespace UnityEditor.Build.Pipeline.Tasks { public static class SBPBuildTasks { - public static IList Create(string builtInShaderBundleName, string unityMonoScriptsBundleName) + public static IList Create(string builtInShaderBundleName, string monoScriptsBundleName) { var buildTasks = new List(); @@ -30,8 +30,8 @@ namespace UnityEditor.Build.Pipeline.Tasks buildTasks.Add(new StripUnusedSpriteSources()); if (string.IsNullOrEmpty(builtInShaderBundleName) == false) buildTasks.Add(new CreateBuiltInShadersBundle(builtInShaderBundleName)); - if (string.IsNullOrEmpty(unityMonoScriptsBundleName) == false) - buildTasks.Add(new CreateMonoScriptBundle(unityMonoScriptsBundleName)); + if (string.IsNullOrEmpty(monoScriptsBundleName) == false) + buildTasks.Add(new CreateMonoScriptBundle(monoScriptsBundleName)); buildTasks.Add(new PostDependencyCallback()); // Packing diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/ScriptableBuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/ScriptableBuildParameters.cs index 7f3e1a6b..2f622193 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/ScriptableBuildParameters.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildPipeline/ScriptableBuildPipeline/ScriptableBuildParameters.cs @@ -41,6 +41,17 @@ namespace YooAsset.Editor public int CacheServerPort; + /// + /// 内置着色器资源包名称 + /// + public string BuiltinShadersBundleName; + + /// + /// Mono脚本资源包名称 + /// + public string MonoScriptsBundleName; + + /// /// 获取可编程构建管线的构建参数 /// diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs index 7b11b3ca..aca7bc99 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/VisualViewers/ScriptableBuildPipelineViewer.cs @@ -28,6 +28,7 @@ namespace YooAsset.Editor var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(PackageName, BuildPipeline); var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(PackageName, BuildPipeline); var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(PackageName, BuildPipeline); + var builtinShaderBundleName = GetBuiltinShaderBundleName(); ScriptableBuildParameters buildParameters = new ScriptableBuildParameters(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); @@ -45,6 +46,7 @@ namespace YooAsset.Editor buildParameters.CompressOption = compressOption; buildParameters.ClearBuildCacheFiles = clearBuildCache; buildParameters.UseAssetDependencyDB = useAssetDependencyDB; + buildParameters.BuiltinShadersBundleName = builtinShaderBundleName; buildParameters.EncryptionServices = CreateEncryptionInstance(); ScriptableBuildPipeline pipeline = new ScriptableBuildPipeline(); @@ -52,6 +54,17 @@ namespace YooAsset.Editor if (buildResult.Success) EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory); } + + /// + /// 内置着色器资源包名称 + /// 注意:和自动收集的着色器资源包名保持一致! + /// + private string GetBuiltinShaderBundleName() + { + var uniqueBundleName = AssetBundleCollectorSettingData.Setting.UniqueBundleName; + var packRuleResult = DefaultPackRule.CreateShadersPackRuleResult(); + return packRuleResult.GetBundleName(PackageName, uniqueBundleName); + } } } #endif \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorPackage.cs b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorPackage.cs index 4c8d7c84..c6a2b0fe 100644 --- a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorPackage.cs +++ b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorPackage.cs @@ -98,9 +98,9 @@ namespace YooAsset.Editor } /// - /// 获取打包收集的资源文件 + /// 开始收集工作 /// - public List GetAllCollectAssets(CollectCommand command) + public CollectResult BeginCollect(CollectCommand command) { Dictionary result = new Dictionary(10000); @@ -138,8 +138,10 @@ namespace YooAsset.Editor } } - // 返回列表 - return result.Values.ToList(); + // 返回结果 + var collectAssets = result.Values.ToList(); + var collectResult = new CollectResult(command, collectAssets); + return collectResult; } /// diff --git a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorSetting.cs b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorSetting.cs index ee0dec16..93c3655d 100644 --- a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorSetting.cs +++ b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorSetting.cs @@ -87,9 +87,9 @@ namespace YooAsset.Editor } /// - /// 获取包裹收集的资源文件 + /// 收集指定包裹的资源文件 /// - public CollectResult GetPackageAssets(bool simulateBuild, bool useAssetDependencyDB, string packageName) + public CollectResult BeginCollect(string packageName, bool simulateBuild, bool useAssetDependencyDB) { if (string.IsNullOrEmpty(packageName)) throw new Exception("Build package name is null or empty !"); @@ -100,16 +100,17 @@ namespace YooAsset.Editor // 创建资源收集命令 IIgnoreRule ignoreRule = AssetBundleCollectorSettingData.GetIgnoreRuleInstance(package.IgnoreRuleName); - CollectCommand command = new CollectCommand(simulateBuild, useAssetDependencyDB, packageName, - package.EnableAddressable, - package.LocationToLower, - package.IncludeAssetGUID, - package.AutoCollectShaders, - UniqueBundleName, ignoreRule); + var command = new CollectCommand(packageName, ignoreRule); + command.SimulateBuild = simulateBuild; + command.UniqueBundleName = UniqueBundleName; + command.UseAssetDependencyDB = useAssetDependencyDB; + command.EnableAddressable = package.EnableAddressable; + command.LocationToLower = package.LocationToLower; + command.IncludeAssetGUID = package.IncludeAssetGUID; + command.AutoCollectShaders = package.AutoCollectShaders; - // 获取收集的资源集合 - CollectResult collectResult = new CollectResult(command); - collectResult.SetCollectAssets(package.GetAllCollectAssets(command)); + // 开始收集工作 + CollectResult collectResult = package.BeginCollect(command); return collectResult; } diff --git a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorWindow.cs b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorWindow.cs index aadcb357..4473e2eb 100644 --- a/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorWindow.cs +++ b/Assets/YooAsset/Editor/AssetBundleCollector/AssetBundleCollectorWindow.cs @@ -164,25 +164,25 @@ namespace YooAsset.Editor RefreshWindow(); } }); + + // 忽略规则 + _ignoreRulePopupField = new PopupField(_ignoreRuleList, 0); + _ignoreRulePopupField.label = "File Ignore Rule"; + _ignoreRulePopupField.name = "IgnoreRulePopupField"; + _ignoreRulePopupField.style.unityTextAlign = TextAnchor.MiddleLeft; + _ignoreRulePopupField.style.width = 300; + _ignoreRulePopupField.formatListItemCallback = FormatListItemCallback; + _ignoreRulePopupField.formatSelectedValueCallback = FormatSelectedValueCallback; + _ignoreRulePopupField.RegisterValueChangedCallback(evt => { - _ignoreRulePopupField = new PopupField(_ignoreRuleList, 0); - _ignoreRulePopupField.label = "File Ignore Rule"; - _ignoreRulePopupField.name = "IgnoreRulePopupField"; - _ignoreRulePopupField.style.unityTextAlign = TextAnchor.MiddleLeft; - _ignoreRulePopupField.style.width = 300; - _ignoreRulePopupField.formatListItemCallback = FormatListItemCallback; - _ignoreRulePopupField.formatSelectedValueCallback = FormatSelectedValueCallback; - _ignoreRulePopupField.RegisterValueChangedCallback(evt => + var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage; + if (selectPackage != null) { - var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage; - if (selectPackage != null) - { - selectPackage.IgnoreRuleName = evt.newValue.ClassName; - AssetBundleCollectorSettingData.ModifyPackage(selectPackage); - } - }); - _setting2Container.Add(_ignoreRulePopupField); - } + selectPackage.IgnoreRuleName = evt.newValue.ClassName; + AssetBundleCollectorSettingData.ModifyPackage(selectPackage); + } + }); + _setting2Container.Add(_ignoreRulePopupField); // 配置修复按钮 var fixBtn = root.Q public List CollectAssets { private set; get; } - public CollectResult(CollectCommand command) + public CollectResult(CollectCommand command, List collectAssets) { Command = command; - } - public void SetCollectAssets(List collectAssets) - { CollectAssets = collectAssets; } }