mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
Fixed #435
This commit is contained in:
parent
7c3cb36630
commit
53720e37ab
@ -17,6 +17,7 @@ namespace AssetStudio
|
||||
private ImageFormat imageFormat;
|
||||
private Avatar avatar;
|
||||
private HashSet<AnimationClip> animationClipHashSet = new HashSet<AnimationClip>();
|
||||
private Dictionary<AnimationClip, string> boundAnimationPathDic = new Dictionary<AnimationClip, string>();
|
||||
private Dictionary<uint, string> bonePathHash = new Dictionary<uint, string>();
|
||||
private Dictionary<Texture2D, string> textureNameDictionary = new Dictionary<Texture2D, string>();
|
||||
private Dictionary<Transform, ImportedFrame> transformDictionary = new Dictionary<Transform, ImportedFrame>();
|
||||
@ -163,6 +164,7 @@ namespace AssetStudio
|
||||
{
|
||||
if (animation.TryGet(out var animationClip))
|
||||
{
|
||||
boundAnimationPathDic.Add(animationClip, GetTransformPath(m_Transform));
|
||||
animationClipHashSet.Add(animationClip);
|
||||
}
|
||||
}
|
||||
@ -600,6 +602,15 @@ namespace AssetStudio
|
||||
return null;
|
||||
}
|
||||
|
||||
private string FixBonePath(AnimationClip m_AnimationClip, string path)
|
||||
{
|
||||
if (boundAnimationPathDic.TryGetValue(m_AnimationClip, out var basePath))
|
||||
{
|
||||
path = basePath + "/" + path;
|
||||
}
|
||||
return FixBonePath(path);
|
||||
}
|
||||
|
||||
private string FixBonePath(string path)
|
||||
{
|
||||
var frame = RootFrame.FindFrameByPath(path);
|
||||
@ -779,7 +790,7 @@ namespace AssetStudio
|
||||
{
|
||||
foreach (var m_CompressedRotationCurve in animationClip.m_CompressedRotationCurves)
|
||||
{
|
||||
var track = iAnim.FindTrack(FixBonePath(m_CompressedRotationCurve.m_Path));
|
||||
var track = iAnim.FindTrack(FixBonePath(animationClip, m_CompressedRotationCurve.m_Path));
|
||||
|
||||
var numKeys = m_CompressedRotationCurve.m_Times.m_NumItems;
|
||||
var data = m_CompressedRotationCurve.m_Times.UnpackInts();
|
||||
@ -801,7 +812,7 @@ namespace AssetStudio
|
||||
}
|
||||
foreach (var m_RotationCurve in animationClip.m_RotationCurves)
|
||||
{
|
||||
var track = iAnim.FindTrack(FixBonePath(m_RotationCurve.path));
|
||||
var track = iAnim.FindTrack(FixBonePath(animationClip, m_RotationCurve.path));
|
||||
foreach (var m_Curve in m_RotationCurve.curve.m_Curve)
|
||||
{
|
||||
var value = Fbx.QuaternionToEuler(new Quaternion(m_Curve.value.X, -m_Curve.value.Y, -m_Curve.value.Z, m_Curve.value.W));
|
||||
@ -810,7 +821,7 @@ namespace AssetStudio
|
||||
}
|
||||
foreach (var m_PositionCurve in animationClip.m_PositionCurves)
|
||||
{
|
||||
var track = iAnim.FindTrack(FixBonePath(m_PositionCurve.path));
|
||||
var track = iAnim.FindTrack(FixBonePath(animationClip, m_PositionCurve.path));
|
||||
foreach (var m_Curve in m_PositionCurve.curve.m_Curve)
|
||||
{
|
||||
track.Translations.Add(new ImportedKeyframe<Vector3>(m_Curve.time, new Vector3(-m_Curve.value.X, m_Curve.value.Y, m_Curve.value.Z)));
|
||||
@ -818,7 +829,7 @@ namespace AssetStudio
|
||||
}
|
||||
foreach (var m_ScaleCurve in animationClip.m_ScaleCurves)
|
||||
{
|
||||
var track = iAnim.FindTrack(FixBonePath(m_ScaleCurve.path));
|
||||
var track = iAnim.FindTrack(FixBonePath(animationClip, m_ScaleCurve.path));
|
||||
foreach (var m_Curve in m_ScaleCurve.curve.m_Curve)
|
||||
{
|
||||
track.Scalings.Add(new ImportedKeyframe<Vector3>(m_Curve.time, new Vector3(m_Curve.value.X, m_Curve.value.Y, m_Curve.value.Z)));
|
||||
@ -828,7 +839,7 @@ namespace AssetStudio
|
||||
{
|
||||
foreach (var m_EulerCurve in animationClip.m_EulerCurves)
|
||||
{
|
||||
var track = iAnim.FindTrack(FixBonePath(m_EulerCurve.path));
|
||||
var track = iAnim.FindTrack(FixBonePath(animationClip, m_EulerCurve.path));
|
||||
foreach (var m_Curve in m_EulerCurve.curve.m_Curve)
|
||||
{
|
||||
track.Rotations.Add(new ImportedKeyframe<Vector3>(m_Curve.time, new Vector3(m_Curve.value.X, -m_Curve.value.Y, -m_Curve.value.Z)));
|
||||
@ -846,7 +857,7 @@ namespace AssetStudio
|
||||
channelName = channelName.Substring(dotPos + 1);
|
||||
}
|
||||
|
||||
var path = FixBonePath(m_FloatCurve.path);
|
||||
var path = FixBonePath(animationClip, m_FloatCurve.path);
|
||||
if (string.IsNullOrEmpty(path))
|
||||
{
|
||||
path = GetPathByChannelName(channelName);
|
||||
|
Loading…
Reference in New Issue
Block a user