mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-27 22:00:23 -04:00
parent
75985c8bf0
commit
9385b4da76
@ -53,6 +53,8 @@ namespace AssetStudio
|
|||||||
else
|
else
|
||||||
reader.Position += 48;
|
reader.Position += 48;
|
||||||
}
|
}
|
||||||
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))//4.3 and up
|
||||||
|
{
|
||||||
//- OffsetPtr m_DefaultPose
|
//- OffsetPtr m_DefaultPose
|
||||||
//-- SkeletonPose data
|
//-- SkeletonPose data
|
||||||
numXforms = reader.ReadInt32();
|
numXforms = reader.ReadInt32();
|
||||||
@ -69,6 +71,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
reader.Position += 4;
|
reader.Position += 4;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//- OffsetPtr m_Human
|
//- OffsetPtr m_Human
|
||||||
//-- Human data
|
//-- Human data
|
||||||
//--- xform m_RootX
|
//--- xform m_RootX
|
||||||
@ -176,18 +179,23 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
reader.Position += 4;
|
reader.Position += 4;
|
||||||
}
|
}
|
||||||
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
|
{
|
||||||
//- vector m_HumanSkeletonReverseIndexArray
|
//- vector m_HumanSkeletonReverseIndexArray
|
||||||
int numReverseIndexes = reader.ReadInt32();
|
int numReverseIndexes = reader.ReadInt32();
|
||||||
for (int i = 0; i < numReverseIndexes; i++)
|
for (int i = 0; i < numReverseIndexes; i++)
|
||||||
{
|
{
|
||||||
reader.Position += 4;
|
reader.Position += 4;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
var m_RootMotionBoneIndex = reader.ReadInt32();
|
var m_RootMotionBoneIndex = reader.ReadInt32();
|
||||||
//- xform m_RootMotionBoneX
|
//- xform m_RootMotionBoneX
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||||
reader.Position += 40;
|
reader.Position += 40;
|
||||||
else
|
else
|
||||||
reader.Position += 48;
|
reader.Position += 48;
|
||||||
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
|
{
|
||||||
//- OffsetPtr m_RootMotionSkeleton
|
//- OffsetPtr m_RootMotionSkeleton
|
||||||
//-- Skeleton data
|
//-- Skeleton data
|
||||||
//--- vector m_Node
|
//--- vector m_Node
|
||||||
@ -227,6 +235,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
reader.Position += 4;
|
reader.Position += 4;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//map m_TOS
|
//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);
|
||||||
|
@ -511,7 +511,7 @@ namespace AssetStudio
|
|||||||
#region BlendShapeData and BindPose for 4.3.0 and later
|
#region BlendShapeData and BindPose for 4.3.0 and later
|
||||||
else if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))
|
else if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))
|
||||||
{
|
{
|
||||||
m_Shapes = new BlendShapeData(reader);//TODO 4.3 down
|
m_Shapes = new BlendShapeData(reader);
|
||||||
|
|
||||||
m_BindPose = new float[reader.ReadInt32()][,];
|
m_BindPose = new float[reader.ReadInt32()][,];
|
||||||
for (int i = 0; i < m_BindPose.Length; i++)
|
for (int i = 0; i < m_BindPose.Length; i++)
|
||||||
|
@ -77,13 +77,29 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
assetsfileList.TryGetTransform(m_GameObject.m_Transform, out var m_Transform);
|
assetsfileList.TryGetTransform(m_GameObject.m_Transform, out var m_Transform);
|
||||||
var rootTransform = m_Transform;
|
var rootTransform = m_Transform;
|
||||||
while (assetsfileList.TryGetTransform(rootTransform.m_Father, out var m_Father))//Get Root Transform
|
var frameList = new List<ImportedFrame>();
|
||||||
|
while (assetsfileList.TryGetTransform(rootTransform.m_Father, out var m_Father))
|
||||||
{
|
{
|
||||||
|
frameList.Add(ConvertFrames(m_Father));
|
||||||
rootTransform = m_Father;
|
rootTransform = m_Father;
|
||||||
}
|
}
|
||||||
|
if (frameList.Count > 0)
|
||||||
|
{
|
||||||
|
FrameList.Add(frameList[frameList.Count - 1]);
|
||||||
|
for (var i = frameList.Count - 2; i >= 0; i--)
|
||||||
|
{
|
||||||
|
var frame = frameList[i];
|
||||||
|
var parent = frameList[i + 1];
|
||||||
|
parent.AddChild(frame);
|
||||||
|
}
|
||||||
|
ConvertFrames(m_Transform, frameList[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ConvertFrames(m_Transform, null);
|
||||||
|
}
|
||||||
|
|
||||||
CreateBonePathHash(rootTransform);
|
CreateBonePathHash(rootTransform);
|
||||||
ConvertFrames(rootTransform, null);
|
|
||||||
ConvertMeshRenderer(m_Transform);
|
ConvertMeshRenderer(m_Transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,7 +186,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ConvertFrames(Transform trans, ImportedFrame parent)
|
private ImportedFrame ConvertFrames(Transform trans)
|
||||||
{
|
{
|
||||||
var frame = new ImportedFrame();
|
var frame = new ImportedFrame();
|
||||||
assetsfileList.TryGetGameObject(trans.m_GameObject, out var m_GameObject);
|
assetsfileList.TryGetGameObject(trans.m_GameObject, out var m_GameObject);
|
||||||
@ -182,9 +198,14 @@ namespace AssetStudio
|
|||||||
var m_LocalScale = new Vector3(trans.m_LocalScale[0], trans.m_LocalScale[1], trans.m_LocalScale[2]);
|
var m_LocalScale = new Vector3(trans.m_LocalScale[0], trans.m_LocalScale[1], trans.m_LocalScale[2]);
|
||||||
var m_LocalPosition = new Vector3(trans.m_LocalPosition[0], trans.m_LocalPosition[1], trans.m_LocalPosition[2]);
|
var m_LocalPosition = new Vector3(trans.m_LocalPosition[0], trans.m_LocalPosition[1], trans.m_LocalPosition[2]);
|
||||||
frame.Matrix = Matrix.Scaling(m_LocalScale) * Matrix.RotationQuaternion(mirroredRotation) * Matrix.Translation(-m_LocalPosition.X, m_LocalPosition.Y, m_LocalPosition.Z);
|
frame.Matrix = Matrix.Scaling(m_LocalScale) * Matrix.RotationQuaternion(mirroredRotation) * Matrix.Translation(-m_LocalPosition.X, m_LocalPosition.Y, m_LocalPosition.Z);
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ConvertFrames(Transform trans, ImportedFrame parent)
|
||||||
|
{
|
||||||
|
var frame = ConvertFrames(trans);
|
||||||
if (parent == null)
|
if (parent == null)
|
||||||
{
|
{
|
||||||
FrameList = new List<ImportedFrame>();
|
|
||||||
FrameList.Add(frame);
|
FrameList.Add(frame);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -356,6 +377,8 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Morphs
|
//Morphs
|
||||||
|
if (mesh.m_Shapes != null)
|
||||||
|
{
|
||||||
foreach (var channel in mesh.m_Shapes.channels)
|
foreach (var channel in mesh.m_Shapes.channels)
|
||||||
{
|
{
|
||||||
morphChannelInfo.Add(channel.nameHash, channel.name);
|
morphChannelInfo.Add(channel.nameHash, channel.name);
|
||||||
@ -411,6 +434,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MeshList.Add(iMesh);
|
MeshList.Add(iMesh);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user