support 2018.1.0

some improvements
This commit is contained in:
Perfare
2018-05-03 02:41:47 +08:00
parent 52ba354dc5
commit 8218662548
14 changed files with 323 additions and 279 deletions

View File

@@ -14,13 +14,23 @@ namespace AssetStudio
public T value { get; set; }
public T inSlope { get; set; }
public T outSlope { get; set; }
public int weightedMode { get; set; }
public T inWeight { get; set; }
public T outWeight { get; set; }
public Keyframe(EndianBinaryReader reader, Func<T> readerFunc)
public Keyframe(EndianBinaryReader reader, Func<T> readerFunc, int[] version)
{
time = reader.ReadSingle();
value = readerFunc();
inSlope = readerFunc();
outSlope = readerFunc();
if (version[0] >= 2018)
{
weightedMode = reader.ReadInt32();
inWeight = readerFunc();
outWeight = readerFunc();
}
}
}
@@ -37,7 +47,7 @@ namespace AssetStudio
m_Curve = new List<Keyframe<T>>(numCurves);
for (int i = 0; i < numCurves; i++)
{
m_Curve.Add(new Keyframe<T>(reader, readerFunc));
m_Curve.Add(new Keyframe<T>(reader, readerFunc, version));
}
m_PreInfinity = reader.ReadInt32();
@@ -162,7 +172,7 @@ namespace AssetStudio
public FloatCurve(AssetPreloadData preloadData)
{
var reader = preloadData.sourceFile.assetsFileReader;
var reader = preloadData.sourceFile.reader;
curve = new AnimationCurve<float>(reader, reader.ReadSingle, preloadData.sourceFile.version);
attribute = reader.ReadAlignedString();
path = reader.ReadAlignedString();
@@ -179,7 +189,7 @@ namespace AssetStudio
public PPtrKeyframe(AssetPreloadData preloadData)
{
var reader = preloadData.sourceFile.assetsFileReader;
var reader = preloadData.sourceFile.reader;
time = reader.ReadSingle();
value = preloadData.sourceFile.ReadPPtr();
}
@@ -196,7 +206,7 @@ namespace AssetStudio
public PPtrCurve(AssetPreloadData preloadData)
{
var reader = preloadData.sourceFile.assetsFileReader;
var reader = preloadData.sourceFile.reader;
int numCurves = reader.ReadInt32();
curve = new List<PPtrKeyframe>(numCurves);
@@ -576,7 +586,7 @@ namespace AssetStudio
public GenericBinding(AssetPreloadData preloadData)
{
var reader = preloadData.sourceFile.assetsFileReader;
var reader = preloadData.sourceFile.reader;
var version = preloadData.sourceFile.version;
path = reader.ReadUInt32();
attribute = reader.ReadUInt32();
@@ -602,7 +612,7 @@ namespace AssetStudio
public AnimationClipBindingConstant(AssetPreloadData preloadData)
{
var reader = preloadData.sourceFile.assetsFileReader;
var reader = preloadData.sourceFile.reader;
int numBindings = reader.ReadInt32();
genericBindings = new List<GenericBinding>(numBindings);
for (int i = 0; i < numBindings; i++)

View File

@@ -49,7 +49,7 @@ namespace AssetStudio
m_Type = (AudioType)reader.ReadInt32();
m_3D = reader.ReadBoolean();
m_UseHardware = reader.ReadBoolean();
reader.Position += 2; //4 byte alignment
reader.AlignStream(4);
if (sourceFile.version[0] >= 4 || (sourceFile.version[0] == 3 && sourceFile.version[1] >= 2)) //3.2.0 to 5
{
@@ -76,12 +76,12 @@ namespace AssetStudio
m_BitsPerSample = reader.ReadInt32();
m_Length = reader.ReadSingle();
m_IsTrackerFormat = reader.ReadBoolean();
reader.Position += 3;
reader.AlignStream(4);
m_SubsoundIndex = reader.ReadInt32();
m_PreloadAudioData = reader.ReadBoolean();
m_LoadInBackground = reader.ReadBoolean();
m_Legacy3D = reader.ReadBoolean();
reader.Position += 1;
reader.AlignStream(4);
m_3D = m_Legacy3D;
m_Source = reader.ReadAlignedString();

View File

@@ -13,13 +13,14 @@ namespace AssetStudio
public UFont(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var version = sourceFile.version;
var reader = preloadData.InitReader();
m_Name = reader.ReadAlignedString();
if (readSwitch)
{
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5 and up
{
var m_LineSpacing = reader.ReadSingle();
var m_DefaultMaterial = sourceFile.ReadPPtr();
@@ -33,48 +34,33 @@ namespace AssetStudio
int m_CharacterRects_size = reader.ReadInt32();
for (int i = 0; i < m_CharacterRects_size; i++)
{
int index = reader.ReadInt32();
//Rectf uv
float uvx = reader.ReadSingle();
float uvy = reader.ReadSingle();
float uvwidth = reader.ReadSingle();
float uvheight = reader.ReadSingle();
//Rectf vert
float vertx = reader.ReadSingle();
float verty = reader.ReadSingle();
float vertwidth = reader.ReadSingle();
float vertheight = reader.ReadSingle();
float width = reader.ReadSingle();
if (sourceFile.version[0] >= 4)
{
bool flipped = reader.ReadBoolean();
reader.Position += 3;
}
reader.Position += 44;//CharacterInfo data 41
}
int m_KerningValues_size = reader.ReadInt32();
for (int i = 0; i < m_KerningValues_size; i++)
{
int pairfirst = reader.ReadInt16();
int pairsecond = reader.ReadInt16();
float second = reader.ReadSingle();
reader.Position += 8;
}
var m_PixelScale = reader.ReadSingle();
int m_FontData_size = reader.ReadInt32();
if (m_FontData_size > 0)
{
m_FontData = reader.ReadBytes(m_FontData_size);
if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
{ preloadData.extension = ".otf"; }
else { preloadData.extension = ".ttf"; }
{
preloadData.extension = ".otf";
}
else
{
preloadData.extension = ".ttf";
}
}
}
else
{
int m_AsciiStartOffset = reader.ReadInt32();
if (sourceFile.version[0] <= 3)
if (version[0] <= 3)
{
int m_FontCountX = reader.ReadInt32();
int m_FontCountY = reader.ReadInt32();
@@ -83,7 +69,7 @@ namespace AssetStudio
float m_Kerning = reader.ReadSingle();
float m_LineSpacing = reader.ReadSingle();
if (sourceFile.version[0] <= 3)
if (version[0] <= 3)
{
int m_PerCharacterKerning_size = reader.ReadInt32();
for (int i = 0; i < m_PerCharacterKerning_size; i++)
@@ -117,10 +103,10 @@ namespace AssetStudio
float vertheight = reader.ReadSingle();
float width = reader.ReadSingle();
if (sourceFile.version[0] >= 4)
if (version[0] >= 4)
{
bool flipped = reader.ReadBoolean();
reader.Position += 3;
var flipped = reader.ReadBoolean();
reader.AlignStream(4);
}
}
@@ -134,10 +120,10 @@ namespace AssetStudio
float second = reader.ReadSingle();
}
if (sourceFile.version[0] <= 3)
if (version[0] <= 3)
{
bool m_GridFont = reader.ReadBoolean();
reader.Position += 3; //4 byte alignment
var m_GridFont = reader.ReadBoolean();
reader.AlignStream(4);
}
else { float m_PixelScale = reader.ReadSingle(); }
@@ -147,30 +133,13 @@ namespace AssetStudio
m_FontData = reader.ReadBytes(m_FontData_size);
if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
{ preloadData.extension = ".otf"; }
else { preloadData.extension = ".ttf"; }
}
float m_FontSize = reader.ReadSingle();//problem here in minifootball
float m_Ascent = reader.ReadSingle();
uint m_DefaultStyle = reader.ReadUInt32();
int m_FontNames = reader.ReadInt32();
for (int i = 0; i < m_FontNames; i++)
{
string m_FontName = reader.ReadAlignedString();
}
if (sourceFile.version[0] >= 4)
{
int m_FallbackFonts = reader.ReadInt32();
for (int i = 0; i < m_FallbackFonts; i++)
{
PPtr m_FallbackFont = sourceFile.ReadPPtr();
preloadData.extension = ".otf";
}
else
{
preloadData.extension = ".ttf";
}
int m_FontRenderingMode = reader.ReadInt32();
}
}
}

View File

@@ -670,7 +670,11 @@ namespace AssetStudio
}
}
BitArray m_CurrentChannels = new BitArray(new int[1] { reader.ReadInt32() });
if (version[0] < 2018)//2018 down
{
var m_CurrentChannels = reader.ReadInt32();
}
m_VertexCount = reader.ReadInt32();
//int singleStreamStride = 0;//used tor version 5
int streamCount = 0;
@@ -730,46 +734,50 @@ namespace AssetStudio
}
#endregion
//actual Vertex Buffer
byte[] m_DataSize = new byte[reader.ReadInt32()];
reader.Read(m_DataSize, 0, m_DataSize.Length);
if (version[0] >= 5) //create streams
if (version[0] >= 5) //ComputeCompressedStreams
{
m_Streams = new StreamInfo[streamCount];
for (int s = 0; s < streamCount; s++)
int maxStream = 0;
foreach (var m_Channel in m_Channels)
{
m_Streams[s] = new StreamInfo();
m_Streams[s].channelMask = new BitArray(new int[1] { 0 });
m_Streams[s].offset = 0;
m_Streams[s].stride = 0;
foreach (var m_Channel in m_Channels)
if (m_Channel.stream > maxStream)
{
if (m_Channel.stream == s) { m_Streams[s].stride += m_Channel.dimension * (4 / (int)Math.Pow(2, m_Channel.format)); }
}
if (s > 0)
{
m_Streams[s].offset = m_Streams[s - 1].offset + m_Streams[s - 1].stride * m_VertexCount;
//sometimes there are 8 bytes between streams
//this is NOT an alignment, even if sometimes it may seem so
if (streamCount == 2) { m_Streams[s].offset = m_DataSize.Length - m_Streams[s].stride * m_VertexCount; }
else
{
m_VertexCount = 0;
return;
}
/*var absoluteOffset = a_Stream.Position + 4 + m_Streams[s].offset;
if ((absoluteOffset % m_Streams[s].stride) != 0)
{
m_Streams[s].offset += m_Streams[s].stride - (int)(absoluteOffset % m_Streams[s].stride);
}*/
maxStream = m_Channel.stream;
}
}
var streamList = new List<StreamInfo>(maxStream + 1);
uint offset = 0;
for (int str = 0; str <= maxStream; str++)
{
uint chnMask = 0;
byte stride = 0;
for (int chn = 0; chn < m_Channels.Length; chn++)
{
if (m_Channels[chn].dimension > 0 && m_Channels[chn].stream == str)
{
chnMask |= 1u << chn;
stride += (byte)(m_Channels[chn].dimension * (m_Channels[chn].format == 0 ? 4 : 1));
}
}
var streamInfo = new StreamInfo
{
channelMask = new BitArray(new[] { (int)chnMask }),
offset = (int)offset,
stride = stride,
dividerOp = 0,
frequency = 0
};
streamList.Add(streamInfo);
offset += (uint)m_VertexCount * stride + (((uint)m_VertexCount & 1) != 0 ? (uint)8 : 0);
}
m_Streams = streamList.ToArray();
}
//actual Vertex Buffer
var m_DataSize = new byte[reader.ReadInt32()];
reader.Read(m_DataSize, 0, m_DataSize.Length);
#endregion
#region compute FvF
@@ -790,11 +798,13 @@ namespace AssetStudio
for (int b = 0; b < 8; b++)
{
//in the future, try to use only m_CurrentChannels
if ((version[0] < 5 && m_Stream.channelMask.Get(b)) || (version[0] >= 5 && m_CurrentChannels.Get(b)))
if (m_Stream.channelMask.Get(b))
{
// in version 4.x the colors channel has 1 dimension, as in 1 color with 4 components
if (b == 2 && m_Channel.format == 2) { m_Channel.dimension = 4; }
if (b == 2 && m_Channel.format == 2)
{
m_Channel.dimension = 4;
}
componentByteSize = 4 / (int)Math.Pow(2, m_Channel.format);
@@ -834,7 +844,7 @@ namespace AssetStudio
case 3: m_UV1 = componentsArray; break;
case 4: m_UV2 = componentsArray; break;
case 5:
if (version[0] == 5) { m_UV3 = componentsArray; }
if (version[0] >= 5) { m_UV3 = componentsArray; }
else { m_Tangents = componentsArray; }
break;
case 6: m_UV4 = componentsArray; break;
@@ -842,10 +852,7 @@ namespace AssetStudio
}
m_Stream.channelMask.Set(b, false);
m_CurrentChannels.Set(b, false);
componentBytes = null;
componentsArray = null;
break; //go to next channel
break;
}
}
}

View File

@@ -8,11 +8,6 @@ namespace AssetStudio
public class MeshRenderer
{
public PPtr m_GameObject;
public bool m_Enabled;
public byte m_CastShadows; //bool prior to version 5
public bool m_ReceiveShadows;
public ushort m_LightmapIndex;
public ushort m_LightmapIndexDynamic;
public PPtr[] m_Materials;
protected MeshRenderer() { }
@@ -20,38 +15,47 @@ namespace AssetStudio
public MeshRenderer(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var version = sourceFile.version;
var reader = preloadData.InitReader();
m_GameObject = sourceFile.ReadPPtr();
if (sourceFile.version[0] < 5)
if (version[0] < 5)
{
m_Enabled = reader.ReadBoolean();
m_CastShadows = reader.ReadByte();
m_ReceiveShadows = reader.ReadBoolean();
m_LightmapIndex = reader.ReadByte();
var m_Enabled = reader.ReadBoolean();
var m_CastShadows = reader.ReadByte();
var m_ReceiveShadows = reader.ReadBoolean();
var m_LightmapIndex = reader.ReadByte();
}
else
{
m_Enabled = reader.ReadBoolean();
var m_Enabled = reader.ReadBoolean();
reader.AlignStream(4);
m_CastShadows = reader.ReadByte();
m_ReceiveShadows = reader.ReadBoolean();
var m_CastShadows = reader.ReadByte();
var m_ReceiveShadows = reader.ReadBoolean();
reader.AlignStream(4);
m_LightmapIndex = reader.ReadUInt16();
m_LightmapIndexDynamic = reader.ReadUInt16();
if (version[0] >= 2018)//2018 and up
{
var m_RenderingLayerMask = reader.ReadUInt32();
}
var m_LightmapIndex = reader.ReadUInt16();
var m_LightmapIndexDynamic = reader.ReadUInt16();
}
if (sourceFile.version[0] >= 3) { reader.Position += 16; } //Vector4f m_LightmapTilingOffset
if (sourceFile.version[0] >= 5) { reader.Position += 16; } //Vector4f m_LightmapTilingOffsetDynamic
if (version[0] >= 3)
{
reader.Position += 16;//Vector4f m_LightmapTilingOffset
}
if (version[0] >= 5)
{
reader.Position += 16;//Vector4f m_LightmapTilingOffsetDynamic
}
m_Materials = new PPtr[reader.ReadInt32()];
for (int m = 0; m < m_Materials.Length; m++)
{
m_Materials[m] = sourceFile.ReadPPtr();
}
}
}
}

View File

@@ -26,27 +26,50 @@ namespace AssetStudio
}
if (sourceFile.version[0] >= 3)
{
if (sourceFile.version[0] == 3 && sourceFile.version[1] < 2) { string AndroidLicensePublicKey = reader.ReadAlignedString(); }
else { bool AndroidProfiler = reader.ReadBoolean(); reader.AlignStream(4); }
if (sourceFile.version[0] == 3 && sourceFile.version[1] < 2)
{
string AndroidLicensePublicKey = reader.ReadAlignedString();
}
else
{
bool AndroidProfiler = reader.ReadBoolean(); reader.AlignStream(4);
}
int defaultScreenOrientation = reader.ReadInt32();
int targetDevice = reader.ReadInt32();
if (sourceFile.version[0] < 5 || (sourceFile.version[0] == 5 && sourceFile.version[1] < 1))
{ int targetGlesGraphics = reader.ReadInt32(); }
{
int targetGlesGraphics = reader.ReadInt32();
}
if ((sourceFile.version[0] == 5 && sourceFile.version[1] < 1) || (sourceFile.version[0] == 4 && sourceFile.version[1] == 6 && sourceFile.version[2] >= 3))
{ int targetIOSGraphics = reader.ReadInt32(); }
{
int targetIOSGraphics = reader.ReadInt32();
}
if (sourceFile.version[0] >= 5 || sourceFile.version[0] == 5 && (sourceFile.version[1] > 2 || (sourceFile.version[1] == 2 && sourceFile.version[2] >= 1)))
{ bool useOnDemandResources = reader.ReadBoolean(); reader.AlignStream(4); }
{
bool useOnDemandResources = reader.ReadBoolean(); reader.AlignStream(4);
}
if (sourceFile.version[0] < 5 || (sourceFile.version[0] == 5 && sourceFile.version[1] < 3))
{ int targetResolution = reader.ReadInt32(); }
{
int targetResolution = reader.ReadInt32();
}
if (sourceFile.version[0] == 3 && sourceFile.version[1] <= 1) { bool OverrideIPodMusic = reader.ReadBoolean(); reader.AlignStream(4); }
else if (sourceFile.version[0] == 3 && sourceFile.version[1] <= 4) { }
else { int accelerometerFrequency = reader.ReadInt32(); }//3.5.0 and up
if (sourceFile.version[0] == 3 && sourceFile.version[1] <= 1)
{
bool OverrideIPodMusic = reader.ReadBoolean(); reader.AlignStream(4);
}
else if (sourceFile.version[0] == 3 && sourceFile.version[1] <= 4)
{
}
else//3.5.0 and up
{
int accelerometerFrequency = reader.ReadInt32();
}
}
//fail in version 5 beta
companyName = reader.ReadAlignedString();

View File

@@ -14,31 +14,41 @@ namespace AssetStudio
public SkinnedMeshRenderer(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var version = preloadData.sourceFile.version;
var version = sourceFile.version;
var reader = preloadData.InitReader();
m_GameObject = sourceFile.ReadPPtr();
if (sourceFile.version[0] < 5)
if (version[0] < 5)
{
m_Enabled = reader.ReadBoolean();
m_CastShadows = reader.ReadByte();//bool
m_ReceiveShadows = reader.ReadBoolean();
m_LightmapIndex = reader.ReadByte();
var m_Enabled = reader.ReadBoolean();
var m_CastShadows = reader.ReadByte();
var m_ReceiveShadows = reader.ReadBoolean();
var m_LightmapIndex = reader.ReadByte();
}
else
{
m_Enabled = reader.ReadBoolean();
var m_Enabled = reader.ReadBoolean();
reader.AlignStream(4);
m_CastShadows = reader.ReadByte();
m_ReceiveShadows = reader.ReadBoolean();
var m_CastShadows = reader.ReadByte();
var m_ReceiveShadows = reader.ReadBoolean();
reader.AlignStream(4);
m_LightmapIndex = reader.ReadUInt16();
m_LightmapIndexDynamic = reader.ReadUInt16();
if (version[0] >= 2018)//2018 and up
{
var m_RenderingLayerMask = reader.ReadUInt32();
}
var m_LightmapIndex = reader.ReadUInt16();
var m_LightmapIndexDynamic = reader.ReadUInt16();
}
if (version[0] >= 3) { reader.Position += 16; } //m_LightmapTilingOffset vector4d
if (sourceFile.version[0] >= 5) { reader.Position += 16; } //Vector4f m_LightmapTilingOffsetDynamic
if (version[0] >= 3)
{
reader.Position += 16;//Vector4f m_LightmapTilingOffset
}
if (version[0] >= 5)
{
reader.Position += 16;//Vector4f m_LightmapTilingOffsetDynamic
}
m_Materials = new PPtr[reader.ReadInt32()];
for (int m = 0; m < m_Materials.Length; m++)
@@ -61,26 +71,36 @@ namespace AssetStudio
int m_SubsetIndices_size = reader.ReadInt32();
reader.Position += m_SubsetIndices_size * 4;
}
PPtr m_StaticBatchRoot = sourceFile.ReadPPtr();
var m_StaticBatchRoot = sourceFile.ReadPPtr();
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 4) || sourceFile.version[0] > 5)//5.4.0 and up
{
PPtr m_ProbeAnchor = sourceFile.ReadPPtr();
PPtr m_LightProbeVolumeOverride = sourceFile.ReadPPtr();
var m_ProbeAnchor = sourceFile.ReadPPtr();
var m_LightProbeVolumeOverride = sourceFile.ReadPPtr();
}
else if (version[0] >= 4 || (version[0] == 3 && version[1] >= 5))
else if (version[0] >= 4 || (version[0] == 3 && version[1] >= 5))//3.5 - 5.3
{
bool m_UseLightProbes = reader.ReadBoolean();
reader.Position += 3; //alignment
if (version[0] == 5) { int m_ReflectionProbeUsage = reader.ReadInt32(); }
//did I ever check if the anchor is conditioned by the bool?
PPtr m_LightProbeAnchor = sourceFile.ReadPPtr();
var m_UseLightProbes = reader.ReadBoolean();
reader.AlignStream(4);
if (version[0] == 5)//5.0 and up
{
int m_ReflectionProbeUsage = reader.ReadInt32();
}
var m_LightProbeAnchor = sourceFile.ReadPPtr();
}
if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))
if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))//4.3 and up
{
if (version[0] == 4 && version[1] <= 3) { int m_SortingLayer = reader.ReadInt16(); }
else { int m_SortingLayer = reader.ReadInt32(); }
if (version[0] == 4 && version[1] == 3)//4.3
{
int m_SortingLayer = reader.ReadInt16();
}
else
{
int m_SortingLayerID = reader.ReadInt32();
//SInt16 m_SortingOrder 5.6 and up
}
int m_SortingOrder = reader.ReadInt16();
reader.AlignStream(4);
@@ -88,14 +108,13 @@ namespace AssetStudio
}
int m_Quality = reader.ReadInt32();
bool m_UpdateWhenOffscreen = reader.ReadBoolean();
bool m_SkinNormals = reader.ReadBoolean(); //3.1.0 and below
reader.Position += 2;
var m_UpdateWhenOffscreen = reader.ReadBoolean();
var m_SkinNormals = reader.ReadBoolean(); //3.1.0 and below
reader.AlignStream(4);
if (version[0] == 2 && version[1] < 6)
if (version[0] == 2 && version[1] < 6)//2.6 down
{
//this would be the only error if mainVersion is not read in time for a version 2.x game
PPtr m_DisableAnimationWhenOffscreen = sourceFile.ReadPPtr();
var m_DisableAnimationWhenOffscreen = sourceFile.ReadPPtr();
}
m_Mesh = sourceFile.ReadPPtr();
@@ -122,19 +141,6 @@ namespace AssetStudio
m_BlendShapeWeights.Add(reader.ReadSingle());
}
}
/*if (version[0] > 4 || (version[0] >= 3 && version[1] >= 5))
{
PPtr m_RootBone = sourceFile.ReadPPtr();
}
if (version[0] > 4 || (version[0] == 3 && version[1] >= 4))
{
//AABB
float[] m_Center = { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
float[] m_Extent = { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
bool m_DirtyAABB = reader.ReadBoolean();
}*/
}
}
}

View File

@@ -47,7 +47,7 @@ namespace AssetStudio
}
var m_Extrude = reader.ReadUInt32();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3)) //5.3 and up TODO need more test
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3)) //5.3 and up
{
var m_IsPolygon = reader.ReadBoolean();
reader.AlignStream(4);
@@ -97,7 +97,10 @@ namespace AssetStudio
reader.Position += size; //UInt8 data
reader.AlignStream(4);
// VertexData m_VertexData
var m_CurrentChannels = reader.ReadInt32();
if (version[0] < 2018)//2018 down
{
var m_CurrentChannels = reader.ReadInt32();
}
var m_VertexCount = reader.ReadUInt32();
// vector m_Channels
size = reader.ReadInt32();
@@ -106,6 +109,18 @@ namespace AssetStudio
size = reader.ReadInt32();
reader.Position += size; //UInt8 data
reader.AlignStream(4);
if (version[0] >= 2018)//2018 and up
{
// vector m_Bindpose
// Matrix4x4f data
size = reader.ReadInt32();
reader.Position += size * 64;
// vector m_SourceSkin
// BoneWeights4 data
size = reader.ReadInt32();
reader.Position += size * 32;
}
}
else
{
@@ -159,6 +174,7 @@ namespace AssetStudio
}
}
}
//vector m_Bones 2018 and up
}
else
{