diff --git a/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs b/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs index 3327947f3..d54dded13 100644 --- a/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs +++ b/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs @@ -129,7 +129,7 @@ namespace UniHumanoid public Avatar CreateAvatar(Transform root) { // force unique name - ForceUniqueName.Process(root); + ForceUniqueName.Validate(root); return AvatarBuilder.BuildHumanAvatar(root.gameObject, ToHumanDescription(root)); } diff --git a/Assets/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs b/Assets/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs index 45f0ec806..ea1eea1ee 100644 --- a/Assets/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs +++ b/Assets/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs @@ -9,7 +9,7 @@ namespace UniHumanoid { public static Avatar LoadHumanoidAvatar(Transform root, IEnumerable<(Transform, HumanBodyBones)> boneMap) { - ForceUniqueName.Process(root); + UniGLTF.Utils.ForceUniqueName.Process(root); var description = new HumanDescription { diff --git a/Assets/UniGLTF/Runtime/UniHumanoid/ForceUniqueName.cs b/Assets/UniGLTF/Runtime/Utils/ForceUniqueName.cs similarity index 79% rename from Assets/UniGLTF/Runtime/UniHumanoid/ForceUniqueName.cs rename to Assets/UniGLTF/Runtime/Utils/ForceUniqueName.cs index 14625a9c3..51b530631 100644 --- a/Assets/UniGLTF/Runtime/UniHumanoid/ForceUniqueName.cs +++ b/Assets/UniGLTF/Runtime/Utils/ForceUniqueName.cs @@ -1,15 +1,32 @@ using System; using System.Collections.Generic; -using UniGLTF; using UnityEngine; -namespace UniHumanoid +namespace UniGLTF.Utils { - class ForceUniqueName + public class ForceUniqueName { HashSet m_uniqueNameSet = new HashSet(); int m_counter = 1; + public static bool Validate(Transform root) + { + HashSet uniqueNameSet = new HashSet(); + var transforms = root.GetComponentsInChildren(); + foreach (var t in transforms) + { + if (uniqueNameSet.Contains(t.name)) + { + UniGLTFLogger.Warning($"duplicate name: {t.name}"); + } + else + { + uniqueNameSet.Add(t.name); + } + } + return uniqueNameSet.Count == transforms.Length; + } + public static void Process(Transform root) { var uniqueName = new ForceUniqueName(); diff --git a/Assets/UniGLTF/Runtime/UniHumanoid/ForceUniqueName.cs.meta b/Assets/UniGLTF/Runtime/Utils/ForceUniqueName.cs.meta similarity index 100% rename from Assets/UniGLTF/Runtime/UniHumanoid/ForceUniqueName.cs.meta rename to Assets/UniGLTF/Runtime/Utils/ForceUniqueName.cs.meta