From 4f88841026a424055b0b70060da7b3d05a607294 Mon Sep 17 00:00:00 2001 From: Perfare Date: Wed, 1 Jun 2022 15:33:01 +0800 Subject: [PATCH] Fixed #962 --- AssetStudio/IImported.cs | 22 ++++++++++++++++++++++ AssetStudioUtility/ModelConverter.cs | 11 +++-------- 2 files changed, 25 insertions(+), 8 deletions(-) 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); } }