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 };
        }
Exemple #2
0
        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);
        }