This commit is contained in:
Perfare 2018-10-27 08:30:43 +08:00
parent 3cd6126ed9
commit d380c38710
2 changed files with 34 additions and 12 deletions

View File

@ -256,7 +256,7 @@ namespace AssetStudio
var iMesh = new ImportedMesh(); var iMesh = new ImportedMesh();
meshR.m_GameObject.TryGetGameObject(out var m_GameObject2); meshR.m_GameObject.TryGetGameObject(out var m_GameObject2);
m_GameObject2.m_Transform.TryGetTransform(out var meshTransform); m_GameObject2.m_Transform.TryGetTransform(out var meshTransform);
iMesh.Name = GetTransformPath(meshTransform); iMesh.Name = GetMeshPath(meshTransform);
iMesh.SubmeshList = new List<ImportedSubmesh>(); iMesh.SubmeshList = new List<ImportedSubmesh>();
var subHashSet = new HashSet<int>(); var subHashSet = new HashSet<int>();
var combine = false; var combine = false;
@ -539,7 +539,7 @@ namespace AssetStudio
if (combine) if (combine)
{ {
meshR.m_GameObject.TryGetGameObject(out var m_GameObject); meshR.m_GameObject.TryGetGameObject(out var m_GameObject);
var frame = ImportedHelpers.FindFrame(m_GameObject.m_Name, FrameList[0]); var frame = ImportedHelpers.FindChild(m_GameObject.m_Name, FrameList[0]);
if (frame?.Parent != null) if (frame?.Parent != null)
{ {
var parent = frame; var parent = frame;
@ -594,11 +594,10 @@ namespace AssetStudio
return null; return null;
} }
private string GetMeshPath(Transform meshTransform)
private string GetTransformPath(Transform meshTransform)
{ {
meshTransform.m_GameObject.TryGetGameObject(out var m_GameObject); meshTransform.m_GameObject.TryGetGameObject(out var m_GameObject);
var curFrame = ImportedHelpers.FindFrame(m_GameObject.m_Name, FrameList[0]); var curFrame = ImportedHelpers.FindChild(m_GameObject.m_Name, FrameList[0]);
var path = curFrame.Name; var path = curFrame.Name;
while (curFrame.Parent != null) while (curFrame.Parent != null)
{ {
@ -609,6 +608,17 @@ namespace AssetStudio
return path; return path;
} }
private string GetTransformPath(Transform transform)
{
transform.m_GameObject.TryGetGameObject(out var m_GameObject);
if (transform.m_Father.TryGetTransform(out var father))
{
return GetTransformPath(father) + "/" + m_GameObject.m_Name;
}
return m_GameObject.m_Name;
}
private ImportedMaterial ConvertMaterial(Material mat) private ImportedMaterial ConvertMaterial(Material mat)
{ {
ImportedMaterial iMat; ImportedMaterial iMat;
@ -1022,7 +1032,7 @@ namespace AssetStudio
{ {
transformName = strs.Last(); transformName = strs.Last();
var parentFrameName = strs[strs.Length - 2]; var parentFrameName = strs[strs.Length - 2];
parentFrame = ImportedHelpers.FindFrame(parentFrameName, rootFrame); parentFrame = ImportedHelpers.FindChild(parentFrameName, rootFrame);
} }
var skeletonPose = avatar.m_Avatar.m_DefaultPose; var skeletonPose = avatar.m_Avatar.m_DefaultPose;

View File

@ -185,15 +185,27 @@ namespace AssetStudio
{ {
public static ImportedFrame FindFrame(string name, ImportedFrame root) public static ImportedFrame FindFrame(string name, ImportedFrame root)
{ {
ImportedFrame frame = root; if (root.Name == name)
if ((frame != null) && (frame.Name == name))
{ {
return frame; return root;
} }
foreach (var child in root)
for (int i = 0; i < root.Count; i++)
{ {
if ((frame = FindFrame(name, root[i])) != null) var frame = FindFrame(name, child);
if (frame != null)
{
return frame;
}
}
return null;
}
public static ImportedFrame FindChild(string name, ImportedFrame root)
{
foreach (var child in root)
{
var frame = FindFrame(name, child);
if (frame != null)
{ {
return frame; return frame;
} }