diff --git a/AssetStudio/Classes/AnimationClip.cs b/AssetStudio/Classes/AnimationClip.cs index 942d9e2..8b9967c 100644 --- a/AssetStudio/Classes/AnimationClip.cs +++ b/AssetStudio/Classes/AnimationClip.cs @@ -637,6 +637,50 @@ namespace AssetStudio m_Binding = new ValueArrayConstant(reader); } } + + public AnimationClipBindingConstant ConvertValueArrayToGenericBinding() + { + var bindings = new AnimationClipBindingConstant(); + var genericBindings = new List(); + var values = m_Binding; + for (int i = 0; i < values.m_ValueArray.Length;) + { + var curveID = values.m_ValueArray[i].m_ID; + var curveTypeID = values.m_ValueArray[i].m_TypeID; + var binding = new GenericBinding(); + genericBindings.Add(binding); + if (curveTypeID == 4174552735) //CRC(PositionX)) + { + binding.path = curveID; + binding.attribute = 1; //kBindTransformPosition + binding.typeID = ClassIDType.Transform; + i += 3; + } + else if (curveTypeID == 2211994246) //CRC(QuaternionX)) + { + binding.path = curveID; + binding.attribute = 2; //kBindTransformRotation + binding.typeID = ClassIDType.Transform; + i += 4; + } + else if (curveTypeID == 1512518241) //CRC(ScaleX)) + { + binding.path = curveID; + binding.attribute = 3; //kBindTransformScale + binding.typeID = ClassIDType.Transform; + i += 3; + } + else + { + binding.typeID = ClassIDType.Animator; + binding.path = 0; + binding.attribute = curveID; + i++; + } + } + bindings.genericBindings = genericBindings.ToArray(); + return bindings; + } } public class ValueDelta @@ -754,6 +798,8 @@ namespace AssetStudio public byte customType; public byte isPPtrCurve; + public GenericBinding() { } + public GenericBinding(ObjectReader reader) { var version = reader.version; @@ -779,6 +825,8 @@ namespace AssetStudio public GenericBinding[] genericBindings; public PPtr[] pptrCurveMapping; + public AnimationClipBindingConstant() { } + public AnimationClipBindingConstant(ObjectReader reader) { int numBindings = reader.ReadInt32(); diff --git a/AssetStudioUtility/ModelConverter.cs b/AssetStudioUtility/ModelConverter.cs index 2f46d8c..731b19c 100644 --- a/AssetStudioUtility/ModelConverter.cs +++ b/AssetStudioUtility/ModelConverter.cs @@ -865,7 +865,7 @@ namespace AssetStudio { var m_Clip = animationClip.m_MuscleClip.m_Clip; var streamedFrames = m_Clip.m_StreamedClip.ReadData(); - var m_ClipBindingConstant = animationClip.m_ClipBindingConstant; + var m_ClipBindingConstant = animationClip.m_ClipBindingConstant ?? m_Clip.ConvertValueArrayToGenericBinding(); for (int frameIndex = 1; frameIndex < streamedFrames.Count - 1; frameIndex++) { var frame = streamedFrames[frameIndex];