public void OnDnaApplied(UMAData umaData) { if (!hashesFound) { leftHandHash = UMAUtils.StringToHash("LeftHand"); rightHandHash = UMAUtils.StringToHash("RightHand"); leftTwistHash = UMAUtils.StringToHash("LeftForeArmTwist"); rightTwistHash = UMAUtils.StringToHash("RightForeArmTwist"); hashesFound = true; } GameObject leftHand = umaData.GetBoneGameObject(leftHandHash); GameObject rightHand = umaData.GetBoneGameObject(rightHandHash); GameObject leftTwist = umaData.GetBoneGameObject(leftTwistHash); GameObject rightTwist = umaData.GetBoneGameObject(rightTwistHash); if ((leftHand == null) || (rightHand == null) || (leftTwist == null) || (rightTwist == null)) { if (Debug.isDebugBuild) { Debug.LogError("Failed to add Forearm Twist to: " + umaData.name); } return; } var twist = umaData.umaRoot.AddComponent <TwistBones>(); twist.twistValue = 0.5f; twist.twistBone = new Transform[] { leftTwist.transform, rightTwist.transform }; twist.refBone = new Transform[] { leftHand.transform, rightHand.transform }; }
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); }