From 89deb0b9608c5dac5ee3fe3f1dd507c6351fb2de Mon Sep 17 00:00:00 2001 From: AXiX-official <2879710747@qq.com> Date: Mon, 20 May 2024 14:46:05 +0800 Subject: [PATCH 1/2] Fix for Unity 2019.4.x --- .../AssetsBundleFileFormat/AssetBundleFile.cs | 12 ++++---- .../AssetBundleHeader.cs | 29 +++++++++++++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs b/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs index c6376ed..096e134 100644 --- a/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs +++ b/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs @@ -58,7 +58,7 @@ public void Read(AssetsFileReader reader) Header = new AssetBundleHeader(); Header.Read(reader); - if (Header.Version >= 7) + if (Header.NeedAlignAfterHeader) { reader.Align16(); } @@ -104,7 +104,7 @@ public void Write(AssetsFileWriter writer, long filePos = 0) Header.Write(writer); - if (Header.Version >= 7) + if (Header.NeedAlignAfterHeader) { writer.Align16(); } @@ -257,6 +257,8 @@ public void Unpack(AssetsFileWriter writer) ) } }; + + newBundleHeader.NeedAlignAfterHeader = Header.NeedAlignAfterHeader; long fileSize = newBundleHeader.GetFileDataOffset(); for (int i = 0; i < blockInfos.Length; i++) @@ -296,7 +298,7 @@ public void Unpack(AssetsFileWriter writer) } newBundleHeader.Write(writer); - if (newBundleHeader.Version >= 7) + if (newBundleHeader.NeedAlignAfterHeader) { writer.Align16(); } @@ -405,7 +407,7 @@ public void Pack(AssetsFileWriter writer, AssetBundleCompressionType compType, long startPos = writer.Position; newHeader.Write(writer); - if (newHeader.Version >= 7) + if (newHeader.NeedAlignAfterHeader) writer.Align16(); int headerSize = (int)(writer.Position - startPos); @@ -579,7 +581,7 @@ public void Pack(AssetsFileWriter writer, AssetBundleCompressionType compType, writer.Position = 0; newHeader.Write(writer); - if (newHeader.Version >= 7) + if (newHeader.NeedAlignAfterHeader) writer.Align16(); } diff --git a/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleHeader.cs b/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleHeader.cs index 7aec5c8..3abd698 100644 --- a/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleHeader.cs +++ b/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleHeader.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; namespace AssetsTools.NET { @@ -27,6 +28,11 @@ public class AssetBundleHeader /// public AssetBundleFSHeader FileStreamHeader { get; set; } + /// + /// Weather align after header. Because for 2019.4.30f1 Signature is 0x06 but has align + /// + public bool NeedAlignAfterHeader { get; set; } + public void Read(AssetsFileReader reader) { reader.BigEndian = true; @@ -38,6 +44,25 @@ public void Read(AssetsFileReader reader) { FileStreamHeader = new AssetBundleFSHeader(); FileStreamHeader.Read(reader); + if (Version >= 7) + { + NeedAlignAfterHeader = true; + } + else if(EngineVersion.StartsWith("2019.4.")) + // should check if FileStreamHeader.Flags != AssetBundleFSHeaderFlags.HasDirectoryInfo + // but UABEANext now only save file with none compression and will read saved file again + // to avoid error won't check flag at now time + { + long p = reader.Position; + long len = 16 - p % 16; + byte[] bytes = reader.ReadBytes((int)len); + NeedAlignAfterHeader = bytes.All(x => x == 0); + reader.Position = p; + } + else + { + NeedAlignAfterHeader = false; + } } else { @@ -80,7 +105,7 @@ public long GetBundleInfoOffset() else { long ret = GenerationVersion.Length + EngineVersion.Length + 0x1a; - if (Version >= 7) + if (NeedAlignAfterHeader) { if ((flags & AssetBundleFSHeaderFlags.OldWebPluginCompatibility) != 0) return ((ret + 0x0a) + 15) & ~15; @@ -111,7 +136,7 @@ public long GetFileDataOffset() else ret += Signature.Length + 1; - if (Version >= 7) + if (NeedAlignAfterHeader) ret = (ret + 15) & ~15; if ((flags & AssetBundleFSHeaderFlags.BlockAndDirAtEnd) == 0) ret += compressedSize; From 5a1891826570bb7d46ef066063a46bba85ca5da3 Mon Sep 17 00:00:00 2001 From: AXiX-official <2879710747@qq.com> Date: Sun, 26 May 2024 07:53:42 +0800 Subject: [PATCH 2/2] Fix for Pack's Headr Align --- .../Standard/AssetsBundleFileFormat/AssetBundleFile.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs b/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs index 096e134..4d6187b 100644 --- a/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs +++ b/AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs @@ -395,6 +395,8 @@ public void Pack(AssetsFileWriter writer, AssetBundleCompressionType compType, EngineVersion = Header.EngineVersion, FileStreamHeader = newFsHeader }; + + newHeader.NeedAlignAfterHeader = Header.NeedAlignAfterHeader; AssetBundleBlockAndDirInfo newBlockAndDirList = new AssetBundleBlockAndDirInfo() {