public static HumanDescription CreateHumanDescription(UMAData umaData, UmaTPose umaTPose) { var res = new HumanDescription(); res.armStretch = 0; res.feetSpacing = 0; res.legStretch = 0; res.lowerArmTwist = 0.2f; res.lowerLegTwist = 1f; res.upperArmTwist = 0.5f; res.upperLegTwist = 0.1f; var animatedBones = umaData.GetAnimatedBones(); if (animatedBones.Length > 0) { List <SkeletonBone> animatedSkeleton = new List <SkeletonBone>(umaTPose.boneInfo); foreach (var animatedBoneHash in animatedBones) { var animatedBone = umaData.GetBoneGameObject(animatedBoneHash).transform; var sb = new SkeletonBone(); sb.name = animatedBone.name; sb.position = animatedBone.localPosition; sb.rotation = animatedBone.localRotation; sb.scale = animatedBone.localScale; animatedSkeleton.Add(sb); } res.skeleton = animatedSkeleton.ToArray(); } else { res.skeleton = umaTPose.boneInfo; } // List<HumanBone> animatedHuman = new List<HumanBone>(); // foreach (HumanBone bone in umaTPose.humanInfo) { // int animIndex = System.Array.IndexOf(umaData.animatedBones, bone.boneName); // if (animIndex > -1) { // animatedHuman.Add(bone); // } // else { // int traitIndex = System.Array.IndexOf(HumanTrait.BoneName, bone.humanName); // if (HumanTrait.RequiredBone(traitIndex)) { // animatedHuman.Add(bone); // } // } // } // List<SkeletonBone> animatedSkeleton = new List<SkeletonBone>(); // foreach (SkeletonBone bone in umaTPose.boneInfo) { // int animIndex = System.Array.IndexOf(umaData.animatedBones, bone.name); // if (animIndex > -1) { // animatedSkeleton.Add(bone); // } // } // res.human = animatedHuman.ToArray(); // res.skeleton = animatedSkeleton.ToArray(); res.human = umaTPose.humanInfo; res.skeleton[0].name = umaData.umaRoot.name; SkeletonModifier(umaData, ref res.skeleton); return(res); }