improve SerializedType read

This commit is contained in:
Perfare 2020-04-06 19:21:48 +08:00
parent 85cf134a49
commit c71ceb7ea6
2 changed files with 19 additions and 12 deletions

View File

@ -112,7 +112,8 @@ namespace AssetStudio
{1083, "BoundsInt"}, {1083, "BoundsInt"},
{1093, "m_CorrespondingSourceObject"}, {1093, "m_CorrespondingSourceObject"},
{1121, "m_PrefabInstance"}, {1121, "m_PrefabInstance"},
{1138, "m_PrefabAsset"} {1138, "m_PrefabAsset"},
{1152, "FileSize"}
}; };
} }
} }

View File

@ -233,13 +233,22 @@ namespace AssetStudio
var typeTree = new List<TypeTreeNode>(); var typeTree = new List<TypeTreeNode>();
if (header.m_Version >= 12 || header.m_Version == 10) if (header.m_Version >= 12 || header.m_Version == 10)
{ {
ReadTypeTree5(typeTree); TypeTreeBlobRead(typeTree);
} }
else else
{ {
ReadTypeTree(typeTree); ReadTypeTree(typeTree);
} }
if (header.m_Version >= 21)
{
var count = reader.ReadInt32();
if (count > 0)
{
reader.Position += 4 * count;
}
}
type.m_Nodes = typeTree; type.m_Nodes = typeTree;
} }
@ -276,13 +285,13 @@ namespace AssetStudio
} }
} }
private void ReadTypeTree5(List<TypeTreeNode> typeTree) private void TypeTreeBlobRead(List<TypeTreeNode> typeTree)
{ {
int numberOfNodes = reader.ReadInt32(); int numberOfNodes = reader.ReadInt32();
int stringBufferSize = reader.ReadInt32(); int stringBufferSize = reader.ReadInt32();
var nodeSize = 24; var nodeSize = 24;
if (header.m_Version > 17) if (header.m_Version >= 19)
{ {
nodeSize = 32; nodeSize = 32;
} }
@ -303,20 +312,17 @@ namespace AssetStudio
typeTreeNode.m_Index = reader.ReadInt32(); typeTreeNode.m_Index = reader.ReadInt32();
typeTreeNode.m_MetaFlag = reader.ReadInt32(); typeTreeNode.m_MetaFlag = reader.ReadInt32();
if (header.m_Version > 17) typeTreeNode.m_Type = ReadString(stringBufferReader, typeTreeNode.m_TypeStrOffset);
typeTreeNode.m_Name = ReadString(stringBufferReader, typeTreeNode.m_NameStrOffset);
if (header.m_Version >= 19)
{ {
reader.Position += 8; reader.Position += 8;
} }
typeTreeNode.m_Type = ReadString(stringBufferReader, typeTreeNode.m_TypeStrOffset);
typeTreeNode.m_Name = ReadString(stringBufferReader, typeTreeNode.m_NameStrOffset);
} }
reader.Position += stringBufferSize; reader.Position += stringBufferSize;
} }
if (header.m_Version >= 21)
{
reader.Position += 4;
}
string ReadString(BinaryReader stringBufferReader, uint value) string ReadString(BinaryReader stringBufferReader, uint value)
{ {
var isOffset = (value & 0x80000000) == 0; var isOffset = (value & 0x80000000) == 0;