From db332573263ffd491298b906fdc552d935537698 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 14 Sep 2022 20:05:55 +0900 Subject: [PATCH] =?UTF-8?q?AvatarBuilder.BuildHumanAvatar=20=E3=81=AB?= =?UTF-8?q?=E3=81=AF=E9=9A=A0=E3=82=8C=E3=81=9F=E3=83=9C=E3=83=BC=E3=83=B3?= =?UTF-8?q?=E5=90=8D=20HumanTrait.BoneName=20=E3=81=8C=E5=BF=85=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HumanBodyBones.ToString != HumanTrait.BoneName であることに注意(指のみ。Space) --- .../Runtime/UniHumanoid/AvatarDescription.cs | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs b/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs index d9ac4c47b..a442d3c7b 100644 --- a/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs +++ b/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs @@ -19,18 +19,31 @@ namespace UniHumanoid public Vector3 max; public Vector3 center; public float axisLength; - private static string[] cashedHumanTraitBoneName = null; - private static readonly Dictionary cachedHumanBodyBonesToBoneNameMap = + + struct BoneTraitName + { + public string WithoutSpace; + public string TraitName; + + public BoneTraitName(string name) + { + TraitName = name; + WithoutSpace = name.Replace(" ", ""); + } + }; + + private static BoneTraitName[] cashedHumanTraitBoneName = null; + private static readonly Dictionary cachedHumanBodyBonesToBoneTraitNameMap = new Dictionary(); static BoneLimit() { // 呼び出し毎にGCが発生するのでキャッシュする string[] boneNames = HumanTrait.BoneName; - cashedHumanTraitBoneName = new string[boneNames.Length]; + cashedHumanTraitBoneName = new BoneTraitName[boneNames.Length]; for (var i = 0; i < boneNames.Length; i++) { - cashedHumanTraitBoneName[i] = boneNames[i].Replace(" ", ""); + cashedHumanTraitBoneName[i] = new BoneTraitName(boneNames[i]); } } @@ -38,7 +51,7 @@ namespace UniHumanoid { return new BoneLimit { - humanBone = (HumanBodyBones) Enum.Parse(typeof(HumanBodyBones), bone.humanName.Replace(" ", ""), true), + humanBone = (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), bone.humanName.Replace(" ", ""), true), boneName = bone.boneName, useDefaultValues = bone.limit.useDefaultValues, min = bone.limit.min, @@ -48,20 +61,20 @@ namespace UniHumanoid }; } - public static String ToHumanBoneName(HumanBodyBones b) + public static String ToHumanBoneTraitName(HumanBodyBones b) { - if (cachedHumanBodyBonesToBoneNameMap.TryGetValue(b, out string result)) + if (cachedHumanBodyBonesToBoneTraitNameMap.TryGetValue(b, out string result)) { return result; } - var bs = b.ToString(); + var boneNameWithoutSpace = b.ToString(); foreach (var x in cashedHumanTraitBoneName) { - if (x == bs) + if (x.WithoutSpace == boneNameWithoutSpace) { - cachedHumanBodyBonesToBoneNameMap[b] = x; - return x; + cachedHumanBodyBonesToBoneTraitNameMap[b] = x.TraitName; + return x.TraitName; } } @@ -73,7 +86,7 @@ namespace UniHumanoid return new HumanBone { boneName = boneName, - humanName = ToHumanBoneName(humanBone), + humanName = ToHumanBoneTraitName(humanBone), limit = new HumanLimit { useDefaultValues = useDefaultValues,