diff --git a/AssetStudio/IImported.cs b/AssetStudio/IImported.cs index c207b17..85b2111 100644 --- a/AssetStudio/IImported.cs +++ b/AssetStudio/IImported.cs @@ -73,6 +73,28 @@ namespace AssetStudio return null; } + public ImportedFrame FindRelativeFrameWithPath(string path) + { + var subs = path.Split(new[] { '/' }, 2); + foreach (var child in children) + { + if (child.Name == subs[0]) + { + if (subs.Length == 1) + { + return child; + } + else + { + var result = child.FindRelativeFrameWithPath(subs[1]); + if (result != null) + return result; + } + } + } + return null; + } + public ImportedFrame FindFrame(string name) { if (Name == name) diff --git a/AssetStudioUtility/ModelConverter.cs b/AssetStudioUtility/ModelConverter.cs index ec1f168..ca2bcdf 100644 --- a/AssetStudioUtility/ModelConverter.cs +++ b/AssetStudioUtility/ModelConverter.cs @@ -1063,26 +1063,21 @@ namespace AssetStudio else { transformName = strs.Last(); - var parentFrameName = strs[strs.Length - 2]; - parentFrame = RootFrame.FindChild(parentFrameName); - //var parentFramePath = path.Substring(0, path.LastIndexOf('/')); - //parentFrame = RootFrame.FindFrameByPath(parentFramePath); + var parentFramePath = path.Substring(0, path.LastIndexOf('/')); + parentFrame = RootFrame.FindRelativeFrameWithPath(parentFramePath); } - var skeletonPose = avatar.m_Avatar.m_DefaultPose; var xform = skeletonPose.m_X[i]; - var frame = RootFrame.FindChild(transformName); if (frame != null) { SetFrame(frame, xform.t, xform.q, xform.s); - parentFrame.AddChild(frame); } else { frame = CreateFrame(transformName, xform.t, xform.q, xform.s); - parentFrame.AddChild(frame); } + parentFrame.AddChild(frame); } }