From c27c4b6153dd561a9491e4f315db2d560e8ea8be Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 12 Feb 2025 14:56:20 +0900 Subject: [PATCH] ForceUniqueName before create AvatarDescription --- .../Runtime/UniHumanoid/AvatarDescription.cs | 2 +- .../Runtime/UniHumanoid/HumanoidLoader.cs | 2 +- .../{UniHumanoid => Utils}/ForceUniqueName.cs | 23 ++++++++++++++++--- .../ForceUniqueName.cs.meta | 0 4 files changed, 22 insertions(+), 5 deletions(-) rename Assets/UniGLTF/Runtime/{UniHumanoid => Utils}/ForceUniqueName.cs (79%) rename Assets/UniGLTF/Runtime/{UniHumanoid => Utils}/ForceUniqueName.cs.meta (100%) 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