private void Initialize(EndianBinaryReader reader, string fileName) { var tableSize = reader.ReadInt32(); var dataEnd = reader.ReadInt32(); var fileFormatVersion = reader.ReadInt32(); var dataOffset = reader.ReadUInt32(); FileFormatVersion = fileFormatVersion; FullFileName = Path.GetFullPath(fileName); var baseDefinitions = false; var platform = 0; switch (fileFormatVersion) { case 6: reader.Position = dataEnd - tableSize; reader.Position += 1; break; case 7: reader.Position = dataEnd - tableSize; reader.Position += 1; Version = reader.ReadStringToNull(); break; case 8: reader.Position = dataEnd - tableSize; reader.Position += 1; Version = reader.ReadStringToNull(); platform = reader.ReadInt32(); break; case 9: reader.Position += 4; Version = reader.ReadStringToNull(); platform = reader.ReadInt32(); break; case 14: case 15: case 16: case 17: reader.Position += 4; Version = reader.ReadStringToNull(); platform = reader.ReadInt32(); baseDefinitions = reader.ReadBoolean(); break; default: throw new FormatException(); } if (platform > 255 || platform < 0) { platform = EndianHelper.SwapEndian(platform); reader.Endian = Endian.LittleEndian; } Platform = (AssetPlatform)platform; ReadClasses(reader, fileFormatVersion, baseDefinitions); if (7 <= fileFormatVersion && fileFormatVersion < 14) { reader.Position += 4; } ReadAssetsPreloadTable(reader, fileFormatVersion, dataOffset); // May be buggy... // The original author assumes these two properties are not used in Unity 2.5.x (in BuildSettings class). VersionComponents = VersionSplitter .Split(Version) .Select(str => Convert.ToInt32(str)) .ToArray(); BuildType = BuildTypePattern.Match(Version).Groups["build"].Value; // 2017.x version handling is solved by better pattern splitting, so we skipped here. if (fileFormatVersion >= 14) { var someCount = reader.ReadInt32(); for (var i = 0; i < someCount; ++i) { var dummy1 = reader.ReadInt32(); reader.AlignBy(4); var pathID = reader.ReadInt64(); } } var sharedFileCount = reader.ReadInt32(); var sharedFileList = new SharedAssetInfo[sharedFileCount]; for (var i = 0; i < sharedFileCount; ++i) { var shared = new SharedAssetInfo(); shared.SomeName = reader.ReadStringToNull(); reader.Position += 20; var sharedFileName = reader.ReadStringToNull(); shared.FileName = sharedFileName; sharedFileList[i] = shared; } SharedAssetList = sharedFileList; }