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"},
{1093, "m_CorrespondingSourceObject"},
{1121, "m_PrefabInstance"},
{1138, "m_PrefabAsset"}
{1138, "m_PrefabAsset"},
{1152, "FileSize"}
};
}
}

View File

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