mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-27 22:00:23 -04:00
Fixed #435
This commit is contained in:
parent
7c3cb36630
commit
53720e37ab
@ -17,6 +17,7 @@ namespace AssetStudio
|
|||||||
private ImageFormat imageFormat;
|
private ImageFormat imageFormat;
|
||||||
private Avatar avatar;
|
private Avatar avatar;
|
||||||
private HashSet<AnimationClip> animationClipHashSet = new HashSet<AnimationClip>();
|
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<uint, string> bonePathHash = new Dictionary<uint, string>();
|
||||||
private Dictionary<Texture2D, string> textureNameDictionary = new Dictionary<Texture2D, string>();
|
private Dictionary<Texture2D, string> textureNameDictionary = new Dictionary<Texture2D, string>();
|
||||||
private Dictionary<Transform, ImportedFrame> transformDictionary = new Dictionary<Transform, ImportedFrame>();
|
private Dictionary<Transform, ImportedFrame> transformDictionary = new Dictionary<Transform, ImportedFrame>();
|
||||||
@ -163,6 +164,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
if (animation.TryGet(out var animationClip))
|
if (animation.TryGet(out var animationClip))
|
||||||
{
|
{
|
||||||
|
boundAnimationPathDic.Add(animationClip, GetTransformPath(m_Transform));
|
||||||
animationClipHashSet.Add(animationClip);
|
animationClipHashSet.Add(animationClip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -600,6 +602,15 @@ namespace AssetStudio
|
|||||||
return null;
|
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)
|
private string FixBonePath(string path)
|
||||||
{
|
{
|
||||||
var frame = RootFrame.FindFrameByPath(path);
|
var frame = RootFrame.FindFrameByPath(path);
|
||||||
@ -779,7 +790,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
foreach (var m_CompressedRotationCurve in animationClip.m_CompressedRotationCurves)
|
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 numKeys = m_CompressedRotationCurve.m_Times.m_NumItems;
|
||||||
var data = m_CompressedRotationCurve.m_Times.UnpackInts();
|
var data = m_CompressedRotationCurve.m_Times.UnpackInts();
|
||||||
@ -801,7 +812,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
foreach (var m_RotationCurve in animationClip.m_RotationCurves)
|
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)
|
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));
|
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)
|
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)
|
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)));
|
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)
|
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)
|
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)));
|
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)
|
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)
|
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)));
|
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);
|
channelName = channelName.Substring(dotPos + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
var path = FixBonePath(m_FloatCurve.path);
|
var path = FixBonePath(animationClip, m_FloatCurve.path);
|
||||||
if (string.IsNullOrEmpty(path))
|
if (string.IsNullOrEmpty(path))
|
||||||
{
|
{
|
||||||
path = GetPathByChannelName(channelName);
|
path = GetPathByChannelName(channelName);
|
||||||
|
Loading…
Reference in New Issue
Block a user