Skip to content

Commit 6a752b4

Browse files
committed
Fix for Unity 2019.4.x
1 parent 6df5ce0 commit 6a752b4

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleFile.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void Read(AssetsFileReader reader)
5858
Header = new AssetBundleHeader();
5959
Header.Read(reader);
6060

61-
if (Header.Version >= 7)
61+
if (Header.NeedAlignAfterHeader)
6262
{
6363
reader.Align16();
6464
}
@@ -104,7 +104,7 @@ public void Write(AssetsFileWriter writer, long filePos = 0)
104104

105105
Header.Write(writer);
106106

107-
if (Header.Version >= 7)
107+
if (Header.NeedAlignAfterHeader)
108108
{
109109
writer.Align16();
110110
}
@@ -296,7 +296,7 @@ public void Unpack(AssetsFileWriter writer)
296296
}
297297

298298
newBundleHeader.Write(writer);
299-
if (newBundleHeader.Version >= 7)
299+
if (newBundleHeader.NeedAlignAfterHeader)
300300
{
301301
writer.Align16();
302302
}
@@ -405,7 +405,7 @@ public void Pack(AssetsFileWriter writer, AssetBundleCompressionType compType,
405405
long startPos = writer.Position;
406406

407407
newHeader.Write(writer);
408-
if (newHeader.Version >= 7)
408+
if (newHeader.NeedAlignAfterHeader)
409409
writer.Align16();
410410

411411
int headerSize = (int)(writer.Position - startPos);
@@ -579,7 +579,7 @@ public void Pack(AssetsFileWriter writer, AssetBundleCompressionType compType,
579579

580580
writer.Position = 0;
581581
newHeader.Write(writer);
582-
if (newHeader.Version >= 7)
582+
if (newHeader.NeedAlignAfterHeader)
583583
writer.Align16();
584584
}
585585

AssetTools.NET/Standard/AssetsBundleFileFormat/AssetBundleHeader.cs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Linq;
23

34
namespace AssetsTools.NET
45
{
@@ -27,6 +28,11 @@ public class AssetBundleHeader
2728
/// </summary>
2829
public AssetBundleFSHeader FileStreamHeader { get; set; }
2930

31+
/// <summary>
32+
/// Weather align after header. Because for 2019.4.30f1 Signature is 0x06 but has align
33+
/// </summary>
34+
public bool NeedAlignAfterHeader { get; set; }
35+
3036
public void Read(AssetsFileReader reader)
3137
{
3238
reader.BigEndian = true;
@@ -38,6 +44,25 @@ public void Read(AssetsFileReader reader)
3844
{
3945
FileStreamHeader = new AssetBundleFSHeader();
4046
FileStreamHeader.Read(reader);
47+
if (Version >= 7)
48+
{
49+
NeedAlignAfterHeader = true;
50+
}
51+
else if(EngineVersion.StartsWith("2019.4."))
52+
// should check if FileStreamHeader.Flags != AssetBundleFSHeaderFlags.HasDirectoryInfo
53+
// but UABEANext now only save file with none compression and will read saved file again
54+
// to avoid error won't check flag at now time
55+
{
56+
long p = reader.Position;
57+
long len = 16 - p % 16;
58+
byte[] bytes = reader.ReadBytes((int)len);
59+
NeedAlignAfterHeader = bytes.All(x => x == 0);
60+
reader.Position = p;
61+
}
62+
else
63+
{
64+
NeedAlignAfterHeader = false;
65+
}
4166
}
4267
else
4368
{
@@ -80,7 +105,7 @@ public long GetBundleInfoOffset()
80105
else
81106
{
82107
long ret = GenerationVersion.Length + EngineVersion.Length + 0x1a;
83-
if (Version >= 7)
108+
if (NeedAlignAfterHeader)
84109
{
85110
if ((flags & AssetBundleFSHeaderFlags.OldWebPluginCompatibility) != 0)
86111
return ((ret + 0x0a) + 15) & ~15;
@@ -111,7 +136,7 @@ public long GetFileDataOffset()
111136
else
112137
ret += Signature.Length + 1;
113138

114-
if (Version >= 7)
139+
if (NeedAlignAfterHeader)
115140
ret = (ret + 15) & ~15;
116141
if ((flags & AssetBundleFSHeaderFlags.BlockAndDirAtEnd) == 0)
117142
ret += compressedSize;

0 commit comments

Comments
 (0)