mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-27 22:00:23 -04:00
preparation work
This commit is contained in:
parent
d7d56b4ad8
commit
18af0a8856
@ -772,10 +772,17 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum AnimationType
|
||||||
|
{
|
||||||
|
kLegacy = 1,
|
||||||
|
kGeneric = 2,
|
||||||
|
kHumanoid = 3
|
||||||
|
};
|
||||||
|
|
||||||
public class AnimationClip
|
public class AnimationClip
|
||||||
{
|
{
|
||||||
public string m_Name { get; set; }
|
public string m_Name { get; set; }
|
||||||
public int m_AnimationType { get; set; }
|
public AnimationType m_AnimationType { get; set; }
|
||||||
public bool m_Legacy { get; set; }
|
public bool m_Legacy { get; set; }
|
||||||
public bool m_Compressed { get; set; }
|
public bool m_Compressed { get; set; }
|
||||||
public bool m_UseHighQualityCurve { get; set; }
|
public bool m_UseHighQualityCurve { get; set; }
|
||||||
@ -809,8 +816,8 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
else if (version[0] >= 4)//4.0 and up
|
else if (version[0] >= 4)//4.0 and up
|
||||||
{
|
{
|
||||||
m_AnimationType = reader.ReadInt32();
|
m_AnimationType = (AnimationType)reader.ReadInt32();
|
||||||
if (m_AnimationType == 1)
|
if (m_AnimationType == AnimationType.kLegacy)
|
||||||
m_Legacy = true;
|
m_Legacy = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1,14 +1,336 @@
|
|||||||
using System;
|
using SharpDX;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
class Avatar
|
public class Node
|
||||||
{
|
{
|
||||||
public string m_Name;
|
public int m_ParentId { get; set; }
|
||||||
public List<KeyValuePair<uint, string>> m_TOS;
|
public int m_AxesId { get; set; }
|
||||||
|
|
||||||
|
public Node(EndianBinaryReader reader)
|
||||||
|
{
|
||||||
|
m_ParentId = reader.ReadInt32();
|
||||||
|
m_AxesId = reader.ReadInt32();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Limit
|
||||||
|
{
|
||||||
|
public object m_Min { get; set; }
|
||||||
|
public object m_Max { get; set; }
|
||||||
|
|
||||||
|
public Limit(EndianBinaryReader reader, int[] version)
|
||||||
|
{
|
||||||
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||||
|
{
|
||||||
|
m_Min = reader.ReadVector3();
|
||||||
|
m_Max = reader.ReadVector3();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_Min = reader.ReadVector4();
|
||||||
|
m_Max = reader.ReadVector4();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Axes
|
||||||
|
{
|
||||||
|
public Vector4 m_PreQ { get; set; }
|
||||||
|
public Vector4 m_PostQ { get; set; }
|
||||||
|
public object m_Sgn { get; set; }
|
||||||
|
public Limit m_Limit { get; set; }
|
||||||
|
public float m_Length { get; set; }
|
||||||
|
public uint m_Type { get; set; }
|
||||||
|
|
||||||
|
public Axes(EndianBinaryReader reader, int[] version)
|
||||||
|
{
|
||||||
|
m_PreQ = reader.ReadVector4();
|
||||||
|
m_PostQ = reader.ReadVector4();
|
||||||
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up
|
||||||
|
{
|
||||||
|
m_Sgn = reader.ReadVector3();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_Sgn = reader.ReadVector4();
|
||||||
|
}
|
||||||
|
m_Limit = new Limit(reader, version);
|
||||||
|
m_Length = reader.ReadSingle();
|
||||||
|
m_Type = reader.ReadUInt32();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Skeleton
|
||||||
|
{
|
||||||
|
public List<Node> m_Node { get; set; }
|
||||||
|
public List<uint> m_ID { get; set; }
|
||||||
|
public List<Axes> m_AxesArray { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public Skeleton(EndianBinaryReader reader, int[] version)
|
||||||
|
{
|
||||||
|
int numNodes = reader.ReadInt32();
|
||||||
|
m_Node = new List<Node>(numNodes);
|
||||||
|
for (int i = 0; i < numNodes; i++)
|
||||||
|
{
|
||||||
|
m_Node.Add(new Node(reader));
|
||||||
|
}
|
||||||
|
|
||||||
|
int numIDs = reader.ReadInt32();
|
||||||
|
m_ID = new List<uint>(numIDs);
|
||||||
|
for (int i = 0; i < numIDs; i++)
|
||||||
|
{
|
||||||
|
m_ID.Add(reader.ReadUInt32());
|
||||||
|
}
|
||||||
|
|
||||||
|
int numAxes = reader.ReadInt32();
|
||||||
|
m_AxesArray = new List<Axes>(numAxes);
|
||||||
|
for (int i = 0; i < numAxes; i++)
|
||||||
|
{
|
||||||
|
m_AxesArray.Add(new Axes(reader, version));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SkeletonPose
|
||||||
|
{
|
||||||
|
public List<xform> m_X { get; set; }
|
||||||
|
|
||||||
|
public SkeletonPose()
|
||||||
|
{
|
||||||
|
m_X = new List<xform>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SkeletonPose(EndianBinaryReader reader, int[] version)
|
||||||
|
{
|
||||||
|
int numXforms = reader.ReadInt32();
|
||||||
|
m_X = new List<xform>(numXforms);
|
||||||
|
for (int i = 0; i < numXforms; i++)
|
||||||
|
{
|
||||||
|
m_X.Add(new xform(reader, version));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Hand
|
||||||
|
{
|
||||||
|
public List<int> m_HandBoneIndex { get; set; }
|
||||||
|
|
||||||
|
public Hand(EndianBinaryReader reader)
|
||||||
|
{
|
||||||
|
int numIndexes = reader.ReadInt32();
|
||||||
|
m_HandBoneIndex = new List<int>(numIndexes);
|
||||||
|
for (int i = 0; i < numIndexes; i++)
|
||||||
|
{
|
||||||
|
m_HandBoneIndex.Add(reader.ReadInt32());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Handle
|
||||||
|
{
|
||||||
|
public xform m_X { get; set; }
|
||||||
|
public uint m_ParentHumanIndex { get; set; }
|
||||||
|
public uint m_ID { get; set; }
|
||||||
|
|
||||||
|
public Handle(EndianBinaryReader reader, int[] version)
|
||||||
|
{
|
||||||
|
m_X = new xform(reader, version);
|
||||||
|
m_ParentHumanIndex = reader.ReadUInt32();
|
||||||
|
m_ID = reader.ReadUInt32();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Collider
|
||||||
|
{
|
||||||
|
public xform m_X { get; set; }
|
||||||
|
public uint m_Type { get; set; }
|
||||||
|
public uint m_XMotionType { get; set; }
|
||||||
|
public uint m_YMotionType { get; set; }
|
||||||
|
public uint m_ZMotionType { get; set; }
|
||||||
|
public float m_MinLimitX { get; set; }
|
||||||
|
public float m_MaxLimitX { get; set; }
|
||||||
|
public float m_MaxLimitY { get; set; }
|
||||||
|
public float m_MaxLimitZ { get; set; }
|
||||||
|
|
||||||
|
public Collider(EndianBinaryReader reader, int[] version)
|
||||||
|
{
|
||||||
|
m_X = new xform(reader, version);
|
||||||
|
m_Type = reader.ReadUInt32();
|
||||||
|
m_XMotionType = reader.ReadUInt32();
|
||||||
|
m_YMotionType = reader.ReadUInt32();
|
||||||
|
m_ZMotionType = reader.ReadUInt32();
|
||||||
|
m_MinLimitX = reader.ReadSingle();
|
||||||
|
m_MaxLimitX = reader.ReadSingle();
|
||||||
|
m_MaxLimitY = reader.ReadSingle();
|
||||||
|
m_MaxLimitZ = reader.ReadSingle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Human
|
||||||
|
{
|
||||||
|
public xform m_RootX { get; set; }
|
||||||
|
public Skeleton m_Skeleton { get; set; }
|
||||||
|
public SkeletonPose m_SkeletonPose { get; set; }
|
||||||
|
public Hand m_LeftHand { get; set; }
|
||||||
|
public Hand m_RightHand { get; set; }
|
||||||
|
public List<Handle> m_Handles { get; set; }
|
||||||
|
public List<Collider> m_ColliderArray { get; set; }
|
||||||
|
public List<int> m_HumanBoneIndex { get; set; }
|
||||||
|
public List<float> m_HumanBoneMass { get; set; }
|
||||||
|
public List<int> m_ColliderIndex { get; set; }
|
||||||
|
public float m_Scale { get; set; }
|
||||||
|
public float m_ArmTwist { get; set; }
|
||||||
|
public float m_ForeArmTwist { get; set; }
|
||||||
|
public float m_UpperLegTwist { get; set; }
|
||||||
|
public float m_LegTwist { get; set; }
|
||||||
|
public float m_ArmStretch { get; set; }
|
||||||
|
public float m_LegStretch { get; set; }
|
||||||
|
public float m_FeetSpacing { get; set; }
|
||||||
|
public bool m_HasLeftHand { get; set; }
|
||||||
|
public bool m_HasRightHand { get; set; }
|
||||||
|
public bool m_HasTDoF { get; set; }
|
||||||
|
|
||||||
|
public Human(EndianBinaryReader reader, int[] version)
|
||||||
|
{
|
||||||
|
m_RootX = new xform(reader, version);
|
||||||
|
m_Skeleton = new Skeleton(reader, version);
|
||||||
|
m_SkeletonPose = new SkeletonPose(reader, version);
|
||||||
|
m_LeftHand = new Hand(reader);
|
||||||
|
m_RightHand = new Hand(reader);
|
||||||
|
|
||||||
|
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down
|
||||||
|
{
|
||||||
|
int numHandles = reader.ReadInt32();
|
||||||
|
m_Handles = new List<Handle>(numHandles);
|
||||||
|
for (int i = 0; i < numHandles; i++)
|
||||||
|
{
|
||||||
|
m_Handles.Add(new Handle(reader, version));
|
||||||
|
}
|
||||||
|
|
||||||
|
int numColliders = reader.ReadInt32();
|
||||||
|
m_ColliderArray = new List<Collider>(numColliders);
|
||||||
|
for (int i = 0; i < numColliders; i++)
|
||||||
|
{
|
||||||
|
m_ColliderArray.Add(new Collider(reader, version));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int numIndexes = reader.ReadInt32();
|
||||||
|
m_HumanBoneIndex = new List<int>(numIndexes);
|
||||||
|
for (int i = 0; i < numIndexes; i++)
|
||||||
|
{
|
||||||
|
m_HumanBoneIndex.Add(reader.ReadInt32());
|
||||||
|
}
|
||||||
|
|
||||||
|
int numMasses = reader.ReadInt32();
|
||||||
|
m_HumanBoneMass = new List<float>(numMasses);
|
||||||
|
for (int i = 0; i < numMasses; i++)
|
||||||
|
{
|
||||||
|
m_HumanBoneMass.Add(reader.ReadSingle());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down
|
||||||
|
{
|
||||||
|
int numColliderIndexes = reader.ReadInt32();
|
||||||
|
m_ColliderIndex = new List<int>(numColliderIndexes);
|
||||||
|
for (int i = 0; i < numColliderIndexes; i++)
|
||||||
|
{
|
||||||
|
m_ColliderIndex.Add(reader.ReadInt32());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Scale = reader.ReadSingle();
|
||||||
|
m_ArmTwist = reader.ReadSingle();
|
||||||
|
m_ForeArmTwist = reader.ReadSingle();
|
||||||
|
m_UpperLegTwist = reader.ReadSingle();
|
||||||
|
m_LegTwist = reader.ReadSingle();
|
||||||
|
m_ArmStretch = reader.ReadSingle();
|
||||||
|
m_LegStretch = reader.ReadSingle();
|
||||||
|
m_FeetSpacing = reader.ReadSingle();
|
||||||
|
m_HasLeftHand = reader.ReadBoolean();
|
||||||
|
m_HasRightHand = reader.ReadBoolean();
|
||||||
|
m_HasTDoF = reader.ReadBoolean();
|
||||||
|
reader.AlignStream(4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AvatarConstant
|
||||||
|
{
|
||||||
|
public Skeleton m_AvatarSkeleton { get; set; }
|
||||||
|
public SkeletonPose m_AvatarSkeletonPose { get; set; }
|
||||||
|
public SkeletonPose m_DefaultPose { get; set; }
|
||||||
|
public List<uint> m_SkeletonNameIDArray { get; set; }
|
||||||
|
public Human m_Human { get; set; }
|
||||||
|
public List<int> m_HumanSkeletonIndexArray { get; set; }
|
||||||
|
public List<int> m_HumanSkeletonReverseIndexArray { get; set; }
|
||||||
|
public int m_RootMotionBoneIndex { get; set; }
|
||||||
|
public xform m_RootMotionBoneX { get; set; }
|
||||||
|
public Skeleton m_RootMotionSkeleton { get; set; }
|
||||||
|
public SkeletonPose m_RootMotionSkeletonPose { get; set; }
|
||||||
|
public List<int> m_RootMotionSkeletonIndexArray { get; set; }
|
||||||
|
|
||||||
|
public AvatarConstant(EndianBinaryReader reader, int[] version)
|
||||||
|
{
|
||||||
|
m_AvatarSkeleton = new Skeleton(reader, version);
|
||||||
|
m_AvatarSkeletonPose = new SkeletonPose(reader, version);
|
||||||
|
|
||||||
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
|
{
|
||||||
|
m_DefaultPose = new SkeletonPose(reader, version);
|
||||||
|
int numIDs = reader.ReadInt32();
|
||||||
|
m_SkeletonNameIDArray = new List<uint>(numIDs);
|
||||||
|
for (int i = 0; i < numIDs; i++)
|
||||||
|
{
|
||||||
|
m_SkeletonNameIDArray.Add(reader.ReadUInt32());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Human = new Human(reader, version);
|
||||||
|
|
||||||
|
int numIndexes = reader.ReadInt32();
|
||||||
|
m_HumanSkeletonIndexArray = new List<int>(numIndexes);
|
||||||
|
for (int i = 0; i < numIndexes; i++)
|
||||||
|
{
|
||||||
|
m_HumanSkeletonIndexArray.Add(reader.ReadInt32());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
|
{
|
||||||
|
int numReverseIndexes = reader.ReadInt32();
|
||||||
|
m_HumanSkeletonReverseIndexArray = new List<int>(numReverseIndexes);
|
||||||
|
for (int i = 0; i < numReverseIndexes; i++)
|
||||||
|
{
|
||||||
|
m_HumanSkeletonReverseIndexArray.Add(reader.ReadInt32());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_RootMotionBoneIndex = reader.ReadInt32();
|
||||||
|
m_RootMotionBoneX = new xform(reader, version);
|
||||||
|
|
||||||
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
|
{
|
||||||
|
m_RootMotionSkeleton = new Skeleton(reader, version);
|
||||||
|
m_RootMotionSkeletonPose = new SkeletonPose(reader, version);
|
||||||
|
|
||||||
|
int numMotionIndexes = reader.ReadInt32();
|
||||||
|
m_RootMotionSkeletonIndexArray = new List<int>(numMotionIndexes);
|
||||||
|
for (int i = 0; i < numMotionIndexes; i++)
|
||||||
|
{
|
||||||
|
m_RootMotionSkeletonIndexArray.Add(reader.ReadInt32());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Avatar
|
||||||
|
{
|
||||||
|
public string m_Name { get; set; }
|
||||||
|
public uint m_AvatarSize { get; set; }
|
||||||
|
public AvatarConstant m_Avatar { get; set; }
|
||||||
|
public List<KeyValuePair<uint, string>> m_TOS { get; set; }
|
||||||
|
|
||||||
public Avatar(AssetPreloadData preloadData)
|
public Avatar(AssetPreloadData preloadData)
|
||||||
{
|
{
|
||||||
@ -18,232 +340,9 @@ namespace AssetStudio
|
|||||||
reader.Position = preloadData.Offset;
|
reader.Position = preloadData.Offset;
|
||||||
|
|
||||||
m_Name = reader.ReadAlignedString();
|
m_Name = reader.ReadAlignedString();
|
||||||
var m_AvatarSize = reader.ReadUInt32();
|
m_AvatarSize = reader.ReadUInt32();
|
||||||
//AvatarConstant m_Avatar
|
m_Avatar = new AvatarConstant(reader, version);
|
||||||
//- OffsetPtr m_AvatarSkeleton
|
|
||||||
//-- Skeleton data
|
|
||||||
//--- vector m_Node
|
|
||||||
var numNodes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numNodes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 8;
|
|
||||||
}
|
|
||||||
//--- vector m_ID
|
|
||||||
int numIDs = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numIDs; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
//--- vector m_AxesArray
|
|
||||||
int numAxes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numAxes; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 76;
|
|
||||||
else
|
|
||||||
reader.Position += 88;
|
|
||||||
}
|
|
||||||
//- OffsetPtr m_AvatarSkeletonPose
|
|
||||||
//-- SkeletonPose data
|
|
||||||
int numXforms = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numXforms; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 40;
|
|
||||||
else
|
|
||||||
reader.Position += 48;
|
|
||||||
}
|
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))//4.3 and up
|
|
||||||
{
|
|
||||||
//- OffsetPtr m_DefaultPose
|
|
||||||
//-- SkeletonPose data
|
|
||||||
numXforms = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numXforms; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 40;
|
|
||||||
else
|
|
||||||
reader.Position += 48;
|
|
||||||
}
|
|
||||||
//- vector m_SkeletonNameIDArray
|
|
||||||
numIDs = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numIDs; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//- OffsetPtr m_Human
|
|
||||||
//-- Human data
|
|
||||||
//--- xform m_RootX
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 40;
|
|
||||||
else
|
|
||||||
reader.Position += 48;
|
|
||||||
//--- OffsetPtr m_Skeleton
|
|
||||||
//---- Skeleton data
|
|
||||||
numNodes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numNodes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 8;
|
|
||||||
}
|
|
||||||
//--- vector m_ID
|
|
||||||
numIDs = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numIDs; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
//--- vector m_AxesArray
|
|
||||||
numAxes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numAxes; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 76;
|
|
||||||
else
|
|
||||||
reader.Position += 88;
|
|
||||||
}
|
|
||||||
//--- OffsetPtr m_SkeletonPose
|
|
||||||
//---- SkeletonPose data
|
|
||||||
numXforms = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numXforms; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 40;
|
|
||||||
else
|
|
||||||
reader.Position += 48;
|
|
||||||
}
|
|
||||||
//--- OffsetPtr m_LeftHand
|
|
||||||
//---- Hand data
|
|
||||||
//----- staticvector m_HandBoneIndex
|
|
||||||
int numIndexes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numIndexes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
//--- OffsetPtr m_RightHand
|
|
||||||
numIndexes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numIndexes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down
|
|
||||||
{
|
|
||||||
//--- vector m_Handles
|
|
||||||
int numHandles = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numHandles; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up
|
|
||||||
reader.Position += 48;
|
|
||||||
else
|
|
||||||
reader.Position += 56;
|
|
||||||
}
|
|
||||||
//--- vector m_ColliderArray
|
|
||||||
int numColliders = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numColliders; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up
|
|
||||||
reader.Position += 72;
|
|
||||||
else
|
|
||||||
reader.Position += 80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//--- staticvector m_HumanBoneIndex
|
|
||||||
numIndexes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numIndexes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
//--- staticvector m_HumanBoneMass
|
|
||||||
int numMasses = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numMasses; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down
|
|
||||||
{
|
|
||||||
//--- staticvector m_ColliderIndex
|
|
||||||
int numColliderIndexes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numColliderIndexes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var m_Scale = reader.ReadSingle();
|
|
||||||
var m_ArmTwist = reader.ReadSingle();
|
|
||||||
var m_ForeArmTwist = reader.ReadSingle();
|
|
||||||
var m_UpperLegTwist = reader.ReadSingle();
|
|
||||||
var m_LegTwist = reader.ReadSingle();
|
|
||||||
var m_ArmStretch = reader.ReadSingle();
|
|
||||||
var m_LegStretch = reader.ReadSingle();
|
|
||||||
var m_FeetSpacing = reader.ReadSingle();
|
|
||||||
var m_HasLeftHand = reader.ReadBoolean();
|
|
||||||
var m_HasRightHand = reader.ReadBoolean();
|
|
||||||
var m_HasTDoF = reader.ReadBoolean();
|
|
||||||
reader.AlignStream(4);
|
|
||||||
//- vector m_HumanSkeletonIndexArray
|
|
||||||
numIndexes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numIndexes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
|
||||||
{
|
|
||||||
//- vector m_HumanSkeletonReverseIndexArray
|
|
||||||
int numReverseIndexes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numReverseIndexes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var m_RootMotionBoneIndex = reader.ReadInt32();
|
|
||||||
//- xform m_RootMotionBoneX
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 40;
|
|
||||||
else
|
|
||||||
reader.Position += 48;
|
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
|
||||||
{
|
|
||||||
//- OffsetPtr m_RootMotionSkeleton
|
|
||||||
//-- Skeleton data
|
|
||||||
//--- vector m_Node
|
|
||||||
numNodes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numNodes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 8;
|
|
||||||
}
|
|
||||||
//--- vector m_ID
|
|
||||||
numIDs = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numIDs; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
//--- vector m_AxesArray
|
|
||||||
numAxes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numAxes; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 76;
|
|
||||||
else
|
|
||||||
reader.Position += 88;
|
|
||||||
}
|
|
||||||
//- OffsetPtr m_RootMotionSkeletonPose
|
|
||||||
//-- SkeletonPose data
|
|
||||||
numXforms = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numXforms; i++)
|
|
||||||
{
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
|
||||||
reader.Position += 40;
|
|
||||||
else
|
|
||||||
reader.Position += 48;
|
|
||||||
}
|
|
||||||
//- vector m_RootMotionSkeletonIndexArray
|
|
||||||
int numMotionIndexes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numMotionIndexes; i++)
|
|
||||||
{
|
|
||||||
reader.Position += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//map m_TOS
|
|
||||||
int numTOS = reader.ReadInt32();
|
int numTOS = reader.ReadInt32();
|
||||||
m_TOS = new List<KeyValuePair<uint, string>>(numTOS);
|
m_TOS = new List<KeyValuePair<uint, string>>(numTOS);
|
||||||
for (int i = 0; i < numTOS; i++)
|
for (int i = 0; i < numTOS; i++)
|
||||||
|
@ -180,12 +180,11 @@ namespace AssetStudio
|
|||||||
return 4;
|
return 4;
|
||||||
case 1: //kChannelFormatFloat16
|
case 1: //kChannelFormatFloat16
|
||||||
return 2;
|
return 2;
|
||||||
//in version 4.x is kChannelFormatColor with 4 dimension
|
case 2: //kChannelFormatColor, in 4.x is size 4
|
||||||
case 2: //kChannelFormatByte
|
|
||||||
return 1;
|
return 1;
|
||||||
case 3: //kChannelFormatByte, only used in 4.x
|
case 3: //kChannelFormatByte
|
||||||
return 1;
|
return 1;
|
||||||
case 11: //kChannelFormatInt
|
case 11: //kChannelFormatInt32
|
||||||
return 4;
|
return 4;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user