Skip to content

Commit b7d21e5

Browse files
committed
Add support for Tuanjie AnimationClip assets
1 parent d7b4d41 commit b7d21e5

File tree

2 files changed

+52
-20
lines changed

2 files changed

+52
-20
lines changed

AssetStudio/AssetsManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ private void ReadAssets()
544544
break;
545545
case ClassIDType.AnimationClip:
546546
obj = objectReader.serializedType?.m_Type != null && LoadingViaTypeTreeEnabled
547-
? new AnimationClip(objectReader, TypeTreeHelper.ReadTypeByteArray(objectReader.serializedType.m_Type, objectReader), jsonOptions)
547+
? new AnimationClip(objectReader, TypeTreeHelper.ReadTypeByteArray(objectReader.serializedType.m_Type, objectReader), jsonOptions, objectInfo)
548548
: new AnimationClip(objectReader);
549549
break;
550550
case ClassIDType.Animator:

AssetStudio/Classes/AnimationClip.cs

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,10 +1027,12 @@ public sealed class AnimationClip : NamedObject
10271027
public ClipMuscleConstant m_MuscleClip;
10281028
public AnimationClipBindingConstant m_ClipBindingConstant;
10291029
public AnimationEvent[] m_Events;
1030+
public byte[] m_AnimData;
1031+
public StreamingInfo m_StreamingInfo;
10301032

10311033
public AnimationClip() { }
10321034

1033-
public AnimationClip(ObjectReader reader, byte[] type, JsonSerializerOptions jsonOptions) : base(reader)
1035+
public AnimationClip(ObjectReader reader, byte[] type, JsonSerializerOptions jsonOptions, ObjectInfo objInfo) : base(reader)
10341036
{
10351037
var parsedAnimClip = JsonSerializer.Deserialize<AnimationClip>(type, jsonOptions);
10361038
m_AnimationType = parsedAnimClip.m_AnimationType;
@@ -1051,6 +1053,22 @@ public AnimationClip(ObjectReader reader, byte[] type, JsonSerializerOptions jso
10511053
m_MuscleClip = parsedAnimClip.m_MuscleClip;
10521054
m_ClipBindingConstant = parsedAnimClip.m_ClipBindingConstant;
10531055
m_Events = parsedAnimClip.m_Events;
1056+
if (!reader.version.IsTuanjie)
1057+
return;
1058+
m_AnimData = parsedAnimClip.m_AnimData;
1059+
m_StreamingInfo = parsedAnimClip.m_StreamingInfo;
1060+
if (!(m_AnimData?.Length > 0))
1061+
return;
1062+
m_MuscleClipSize = (uint)m_AnimData.Length;
1063+
using (var muscleStream = new MemoryStream(m_AnimData))
1064+
{
1065+
using (var muscleReader = new EndianBinaryReader(muscleStream, EndianType.LittleEndian))
1066+
{
1067+
_ = muscleReader.ReadUInt32();
1068+
var objReader = new ObjectReader(muscleReader, assetsFile, objInfo);
1069+
m_MuscleClip = new ClipMuscleConstant(objReader);
1070+
}
1071+
}
10541072
}
10551073

10561074
public AnimationClip(ObjectReader reader) : base(reader)
@@ -1094,28 +1112,31 @@ public AnimationClip(ObjectReader reader) : base(reader)
10941112
}
10951113
}
10961114

1097-
if (version >= (5, 3))//5.3 and up
1115+
if (!version.IsTuanjie)
10981116
{
1099-
int numEulerCurves = reader.ReadInt32();
1100-
m_EulerCurves = new Vector3Curve[numEulerCurves];
1101-
for (int i = 0; i < numEulerCurves; i++)
1117+
if (version >= (5, 3)) //5.3 and up
11021118
{
1103-
m_EulerCurves[i] = new Vector3Curve(reader);
1119+
int numEulerCurves = reader.ReadInt32();
1120+
m_EulerCurves = new Vector3Curve[numEulerCurves];
1121+
for (int i = 0; i < numEulerCurves; i++)
1122+
{
1123+
m_EulerCurves[i] = new Vector3Curve(reader);
1124+
}
11041125
}
1105-
}
11061126

1107-
int numPCurves = reader.ReadInt32();
1108-
m_PositionCurves = new Vector3Curve[numPCurves];
1109-
for (int i = 0; i < numPCurves; i++)
1110-
{
1111-
m_PositionCurves[i] = new Vector3Curve(reader);
1112-
}
1127+
int numPCurves = reader.ReadInt32();
1128+
m_PositionCurves = new Vector3Curve[numPCurves];
1129+
for (int i = 0; i < numPCurves; i++)
1130+
{
1131+
m_PositionCurves[i] = new Vector3Curve(reader);
1132+
}
11131133

1114-
int numSCurves = reader.ReadInt32();
1115-
m_ScaleCurves = new Vector3Curve[numSCurves];
1116-
for (int i = 0; i < numSCurves; i++)
1117-
{
1118-
m_ScaleCurves[i] = new Vector3Curve(reader);
1134+
int numSCurves = reader.ReadInt32();
1135+
m_ScaleCurves = new Vector3Curve[numSCurves];
1136+
for (int i = 0; i < numSCurves; i++)
1137+
{
1138+
m_ScaleCurves[i] = new Vector3Curve(reader);
1139+
}
11191140
}
11201141

11211142
int numFCurves = reader.ReadInt32();
@@ -1147,7 +1168,18 @@ public AnimationClip(ObjectReader reader) : base(reader)
11471168
if (version >= 4)//4.0 and up
11481169
{
11491170
m_MuscleClipSize = reader.ReadUInt32();
1150-
m_MuscleClip = new ClipMuscleConstant(reader);
1171+
if (m_MuscleClipSize > 0)
1172+
{
1173+
if (version.IsTuanjie)
1174+
{
1175+
_ = reader.ReadUInt32();
1176+
}
1177+
m_MuscleClip = new ClipMuscleConstant(reader); //m_AnimData (Tuanjie)
1178+
if (version.IsTuanjie)
1179+
{
1180+
m_StreamingInfo = new StreamingInfo(reader);
1181+
}
1182+
}
11511183
}
11521184
if (version >= (4, 3)) //4.3 and up
11531185
{

0 commit comments

Comments
 (0)