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