From 020bd28929dad5a31fc11fbc277240a3b0692c27 Mon Sep 17 00:00:00 2001 From: CatImmortal <1304085906@qq.com> Date: Thu, 15 Jun 2023 17:44:48 +0800 Subject: [PATCH] =?UTF-8?q?[feat][editor]:=E5=A2=9E=E5=8A=A0=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E8=A1=A5=E4=B8=81=E8=B5=84=E6=BA=90=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=B8=AD=E7=9A=84=E9=9D=9E=E8=A1=A5=E4=B8=81?= =?UTF-8?q?=E8=B5=84=E6=BA=90=EF=BC=8C=E9=98=B2=E6=AD=A2=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=9C=A8=E5=86=85=E5=AD=98=E4=B8=AD=E5=86=97=E4=BD=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/BuildPipeline/BuildPipeline.cs | 1 + .../Task/CalculateBundleBuilds.cs | 3 +- .../Task/RemoveNonPatchDependency.cs | 50 +++++++++++++++++++ .../Task/RemoveNonPatchDependency.cs.meta | 3 ++ 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 Assets/CatAsset/Editor/BuildPipeline/Task/RemoveNonPatchDependency.cs create mode 100644 Assets/CatAsset/Editor/BuildPipeline/Task/RemoveNonPatchDependency.cs.meta diff --git a/Assets/CatAsset/Editor/BuildPipeline/BuildPipeline.cs b/Assets/CatAsset/Editor/BuildPipeline/BuildPipeline.cs index 5df3d4d..8c66c20 100644 --- a/Assets/CatAsset/Editor/BuildPipeline/BuildPipeline.cs +++ b/Assets/CatAsset/Editor/BuildPipeline/BuildPipeline.cs @@ -68,6 +68,7 @@ public static ReturnCode BuildBundles(BuildTarget targetPlatform,bool isBuildPat if (isBuildPatch) { //补丁包需要合并资源清单 + taskList.Add(new RemoveNonPatchDependency()); taskList.Add(new MergePatchManifest()); } taskList.Add(new WriteManifestFile()); diff --git a/Assets/CatAsset/Editor/BuildPipeline/Task/CalculateBundleBuilds.cs b/Assets/CatAsset/Editor/BuildPipeline/Task/CalculateBundleBuilds.cs index 5bff6cc..68c3fee 100644 --- a/Assets/CatAsset/Editor/BuildPipeline/Task/CalculateBundleBuilds.cs +++ b/Assets/CatAsset/Editor/BuildPipeline/Task/CalculateBundleBuilds.cs @@ -53,8 +53,7 @@ public ReturnCode Run() { //构建补丁资源包 Stopwatch sw = Stopwatch.StartNew(); - - + var clonedConfig = new PatchAssetCalculateHelper().Calculate(config, configParam.TargetPlatform); sw.Stop(); diff --git a/Assets/CatAsset/Editor/BuildPipeline/Task/RemoveNonPatchDependency.cs b/Assets/CatAsset/Editor/BuildPipeline/Task/RemoveNonPatchDependency.cs new file mode 100644 index 0000000..0309c41 --- /dev/null +++ b/Assets/CatAsset/Editor/BuildPipeline/Task/RemoveNonPatchDependency.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using CatAsset.Runtime; +using UnityEditor.Build.Pipeline; +using UnityEditor.Build.Pipeline.Injector; +using UnityEditor.Build.Pipeline.Interfaces; +using UnityEngine; + +namespace CatAsset.Editor +{ + /// + /// 移除非补丁资源的依赖,以防止资源内存冗余 + /// + public class RemoveNonPatchDependency : IBuildTask + { + public int Version { get; } + + [InjectContext(ContextUsage.In)] + private IManifestParam manifestParam; + + public ReturnCode Run() + { + HashSet patchAssets = new HashSet(); + foreach (BundleManifestInfo bundleManifestInfo in manifestParam.Manifest.Bundles) + { + foreach (AssetManifestInfo assetManifestInfo in bundleManifestInfo.Assets) + { + patchAssets.Add(assetManifestInfo.Name); + } + } + + foreach (BundleManifestInfo bundleManifestInfo in manifestParam.Manifest.Bundles) + { + foreach (AssetManifestInfo assetManifestInfo in bundleManifestInfo.Assets) + { + for (int i = assetManifestInfo.Dependencies.Count - 1; i >= 0; i--) + { + string dependency = assetManifestInfo.Dependencies[i]; + if (!patchAssets.Contains(dependency)) + { + assetManifestInfo.Dependencies.RemoveAt(i); + Debug.Log($"移除{assetManifestInfo}的依赖列表中的非补丁资源{dependency}"); + } + } + } + } + + return ReturnCode.Success; + } + } +} \ No newline at end of file diff --git a/Assets/CatAsset/Editor/BuildPipeline/Task/RemoveNonPatchDependency.cs.meta b/Assets/CatAsset/Editor/BuildPipeline/Task/RemoveNonPatchDependency.cs.meta new file mode 100644 index 0000000..e699ead --- /dev/null +++ b/Assets/CatAsset/Editor/BuildPipeline/Task/RemoveNonPatchDependency.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 61ca33a33b0a4df181018e7cc4cbe9ed +timeCreated: 1686820418 \ No newline at end of file