private Vector3 calulateModelFingerPointing() { Vector3 distance = transform.InverseTransformPoint(transform.position) - transform.InverseTransformPoint(transform.GetChild(0).transform.position); Vector3 zeroed = RiggedHand.CalculateZeroedVector(distance); return(zeroed); }
void AutoRigMecanim() { //Assigning these here since this component gets added and used at editor time AnimatorForMapping = gameObject.GetComponent <Animator>(); HandPoolToPopulate = GameObject.FindObjectOfType <HandPool>(); Reset(); //Find hands and assign RiggedHands Transform Hand_L = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftHand); if (Hand_L.GetComponent <RiggedHand>()) { RiggedHand_L = Hand_L.GetComponent <RiggedHand>(); } else { RiggedHand_L = Hand_L.gameObject.AddComponent <RiggedHand>(); } HandTransitionBehavior_L = Hand_L.gameObject.AddComponent <HandDrop>(); RiggedHand_L.Handedness = Chirality.Left; RiggedHand_L.SetEditorLeapPose = false; Transform Hand_R = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightHand); if (Hand_R.GetComponent <RiggedHand>()) { RiggedHand_R = Hand_R.GetComponent <RiggedHand>(); } else { RiggedHand_R = Hand_R.gameObject.AddComponent <RiggedHand>(); } HandTransitionBehavior_R = Hand_R.gameObject.AddComponent <HandDrop>(); RiggedHand_R.Handedness = Chirality.Right; RiggedHand_R.SetEditorLeapPose = false; //Find palms and assign to RiggedHands RiggedHand_L.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftHand); RiggedHand_R.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightHand); RiggedHand_R.UseMetaCarpals = UseMetaCarpals; RiggedHand_L.UseMetaCarpals = UseMetaCarpals; findAndAssignRiggedFingers(UseMetaCarpals); RiggedHand_L.AutoRigRiggedHand(RiggedHand_L.palm, RiggedFinger_L_Pinky.transform, RiggedFinger_L_Index.transform); RiggedHand_R.AutoRigRiggedHand(RiggedHand_R.palm, RiggedFinger_R_Pinky.transform, RiggedFinger_R_Index.transform); if (ModelGroupName == "" || ModelGroupName != null) { ModelGroupName = transform.name; } HandPoolToPopulate.AddNewGroup(ModelGroupName, RiggedHand_L, RiggedHand_R); modelFingerPointing_L = RiggedHand_L.modelFingerPointing; modelPalmFacing_L = RiggedHand_L.modelPalmFacing; modelFingerPointing_R = RiggedHand_R.modelFingerPointing; modelPalmFacing_R = RiggedHand_R.modelPalmFacing; }
/// <summary> /// Updates model bone positions and rotations based on tracked hand data. /// </summary> public override void UpdateFinger() { for (int i = 0; i < bones.Length; ++i) { if (bones[i] != null) { bones[i].rotation = GetBoneRotation(i) * Reorientation(); if (deformPosition) { var boneRootPos = GetJointPosition(i); bones[i].position = boneRootPos; if (i == 3 && scaleLastFingerBone) { // Set fingertip base bone scale to match the bone length to the fingertip. // This will only scale correctly if the model was constructed to match // the standard "test" edit-time hand model from the TestHandFactory. var boneTipPos = GetJointPosition(i + 1); var boneVec = boneTipPos - boneRootPos; // If the rigged hand is scaled (due to a scaled rig), we'll need to divide // out that scale from the bone length to get its normal length. if (_parentRiggedHand == null) { _parentRiggedHand = GetComponentInParent <RiggedHand>(); } if (_parentRiggedHand != null) { var parentRiggedHandScale = _parentRiggedHand.transform.lossyScale.x; if (parentRiggedHandScale != 0f && parentRiggedHandScale != 1f) { boneVec /= parentRiggedHandScale; } } var boneLen = boneVec.magnitude; var standardLen = s_standardFingertipLengths[(int)this.fingerType]; var newScale = bones[i].transform.localScale; var lengthComponentIdx = getLargestComponentIndex(modelFingerPointing); newScale[lengthComponentIdx] = boneLen / standardLen; bones[i].transform.localScale = newScale; } } } } }
void Start() { hand = gameObject.GetComponent <RiggedHand>(); }
void AutoRigByName() { List <string> LeftHandStrings = new List <string> { "left" }; List <string> RightHandStrings = new List <string> { "right" }; //Assigning these here since this component gets added and used at editor time HandPoolToPopulate = GameObject.FindObjectOfType <HandPool>(); Reset(); //Find hands and assigns RiggedHands Transform Hand_L = null; foreach (Transform t in transform) { if (LeftHandStrings.Any(w => t.name.ToLower().Contains(w))) { Hand_L = t; } } if (Hand_L != null) { RiggedHand_L = Hand_L.gameObject.AddComponent <RiggedHand>(); HandTransitionBehavior_L = Hand_L.gameObject.AddComponent <HandEnableDisable>(); RiggedHand_L.Handedness = Chirality.Left; RiggedHand_L.SetEditorLeapPose = false; RiggedHand_L.UseMetaCarpals = UseMetaCarpals; RiggedHand_L.SetupRiggedHand(); RiggedFinger_L_Thumb = (RiggedFinger)RiggedHand_L.fingers[0]; RiggedFinger_L_Index = (RiggedFinger)RiggedHand_L.fingers[1]; RiggedFinger_L_Mid = (RiggedFinger)RiggedHand_L.fingers[2]; RiggedFinger_L_Ring = (RiggedFinger)RiggedHand_L.fingers[3]; RiggedFinger_L_Pinky = (RiggedFinger)RiggedHand_L.fingers[4]; modelFingerPointing_L = RiggedHand_L.modelFingerPointing; modelPalmFacing_L = RiggedHand_L.modelPalmFacing; RiggedHand_L.StoreJointsStartPose(); } Transform Hand_R = null; foreach (Transform t in transform) { if (RightHandStrings.Any(w => t.name.ToLower().Contains(w))) { Hand_R = t; } } if (Hand_R != null) { RiggedHand_R = Hand_R.gameObject.AddComponent <RiggedHand>(); HandTransitionBehavior_R = Hand_R.gameObject.AddComponent <HandEnableDisable>(); RiggedHand_R.Handedness = Chirality.Right; RiggedHand_R.SetEditorLeapPose = false; RiggedHand_R.UseMetaCarpals = UseMetaCarpals; RiggedHand_R.SetupRiggedHand(); RiggedFinger_R_Thumb = (RiggedFinger)RiggedHand_R.fingers[0]; RiggedFinger_R_Index = (RiggedFinger)RiggedHand_R.fingers[1]; RiggedFinger_R_Mid = (RiggedFinger)RiggedHand_R.fingers[2]; RiggedFinger_R_Ring = (RiggedFinger)RiggedHand_R.fingers[3]; RiggedFinger_R_Pinky = (RiggedFinger)RiggedHand_R.fingers[4]; modelFingerPointing_R = RiggedHand_R.modelFingerPointing; modelPalmFacing_R = RiggedHand_R.modelPalmFacing; RiggedHand_R.StoreJointsStartPose(); } //Find palms and assign to RiggedHands //RiggedHand_L.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftHand); //RiggedHand_R.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightHand); if (ModelGroupName == "" || ModelGroupName != null) { ModelGroupName = transform.name; } HandPoolToPopulate.AddNewGroup(ModelGroupName, RiggedHand_L, RiggedHand_R); }
void AutoRigByName() { List<string> LeftHandStrings = new List<string> { "left", "_l" }; List<string> RightHandStrings = new List<string> { "right", "_r" }; //Assigning these here since this component gets added and used at editor time HandPoolToPopulate = GameObject.FindObjectOfType<HandPool>(); Reset(); //Find hands and assigns RiggedHands Transform Hand_L = null; foreach (Transform t in transform) { if (LeftHandStrings.Any(w => t.name.ToLower().Contains(w))) { Hand_L = t; } } RiggedHand_L = Hand_L.gameObject.AddComponent<RiggedHand>(); HandTransitionBehavior_L = Hand_L.gameObject.AddComponent<HandEnableDisable>(); RiggedHand_L.Handedness = Chirality.Left; RiggedHand_L.SetEditorLeapPose = false; RiggedHand_L.UseMetaCarpals = UseMetaCarpals; Transform Hand_R = null; foreach (Transform t in transform) { if (RightHandStrings.Any(w => t.name.ToLower().Contains(w))) { Hand_R = t; } } RiggedHand_R = Hand_R.gameObject.AddComponent<RiggedHand>(); HandTransitionBehavior_R = Hand_R.gameObject.AddComponent<HandEnableDisable>(); RiggedHand_R.Handedness = Chirality.Right; RiggedHand_R.SetEditorLeapPose = false; RiggedHand_R.UseMetaCarpals = UseMetaCarpals; //Find palms and assign to RiggedHands //RiggedHand_L.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftHand); //RiggedHand_R.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightHand); RiggedHand_L.SetupRiggedHand(); RiggedHand_R.SetupRiggedHand(); if (ModelGroupName == "" || ModelGroupName != null) { ModelGroupName = transform.name; } HandPoolToPopulate.AddNewGroup(ModelGroupName, RiggedHand_L, RiggedHand_R); RiggedFinger_L_Thumb = (RiggedFinger)RiggedHand_L.fingers[0]; RiggedFinger_L_Index = (RiggedFinger)RiggedHand_L.fingers[1]; RiggedFinger_L_Mid = (RiggedFinger)RiggedHand_L.fingers[2]; RiggedFinger_L_Ring = (RiggedFinger)RiggedHand_L.fingers[3]; RiggedFinger_L_Pinky = (RiggedFinger)RiggedHand_L.fingers[4]; RiggedFinger_R_Thumb = (RiggedFinger)RiggedHand_R.fingers[0]; RiggedFinger_R_Index = (RiggedFinger)RiggedHand_R.fingers[1]; RiggedFinger_R_Mid = (RiggedFinger)RiggedHand_R.fingers[2]; RiggedFinger_R_Ring = (RiggedFinger)RiggedHand_R.fingers[3]; RiggedFinger_R_Pinky = (RiggedFinger)RiggedHand_R.fingers[4]; modelFingerPointing_L = RiggedHand_L.modelFingerPointing; modelPalmFacing_L = RiggedHand_L.modelPalmFacing; modelFingerPointing_R = RiggedHand_R.modelFingerPointing; modelPalmFacing_R = RiggedHand_R.modelPalmFacing; }
void AutoRigMecanim() { //Assigning these here since this component gets added and used at editor time AnimatorForMapping = gameObject.GetComponent<Animator>(); HandPoolToPopulate = GameObject.FindObjectOfType<HandPool>(); Reset(); //Find hands and assign RiggedHands Transform Hand_L = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftHand); if (Hand_L.GetComponent<RiggedHand>()) { RiggedHand_L = Hand_L.GetComponent<RiggedHand>(); } else RiggedHand_L = Hand_L.gameObject.AddComponent<RiggedHand>(); HandTransitionBehavior_L =Hand_L.gameObject.AddComponent<HandDrop>(); RiggedHand_L.Handedness = Chirality.Left; RiggedHand_L.SetEditorLeapPose = false; Transform Hand_R = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightHand); if (Hand_R.GetComponent<RiggedHand>()) { RiggedHand_R = Hand_R.GetComponent<RiggedHand>(); } else RiggedHand_R = Hand_R.gameObject.AddComponent<RiggedHand>(); HandTransitionBehavior_R = Hand_R.gameObject.AddComponent<HandDrop>(); RiggedHand_R.Handedness = Chirality.Right; RiggedHand_R.SetEditorLeapPose = false; //Find palms and assign to RiggedHands RiggedHand_L.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftHand); RiggedHand_R.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightHand); //Find Fingers and assign RiggedFingers RiggedFinger_L_Thumb = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftThumbProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_L_Thumb.fingerType = Finger.FingerType.TYPE_THUMB; RiggedFinger_L_Index = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftIndexProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_L_Index.fingerType = Finger.FingerType.TYPE_INDEX; RiggedFinger_L_Mid = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftMiddleProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_L_Mid.fingerType = Finger.FingerType.TYPE_MIDDLE; RiggedFinger_L_Ring = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftRingProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_L_Ring.fingerType = Finger.FingerType.TYPE_RING; RiggedFinger_L_Pinky = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftLittleProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_L_Pinky.fingerType = Finger.FingerType.TYPE_PINKY; RiggedFinger_R_Thumb = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightThumbProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_R_Thumb.fingerType = Finger.FingerType.TYPE_THUMB; RiggedFinger_R_Index = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightIndexProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_R_Index.fingerType = Finger.FingerType.TYPE_INDEX; RiggedFinger_R_Mid = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightMiddleProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_R_Mid.fingerType = Finger.FingerType.TYPE_MIDDLE; RiggedFinger_R_Ring = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightRingProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_R_Ring.fingerType = Finger.FingerType.TYPE_RING; RiggedFinger_R_Pinky = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightLittleProximal).gameObject.AddComponent<RiggedFinger>(); RiggedFinger_R_Pinky.fingerType = Finger.FingerType.TYPE_PINKY; RiggedHand_L.AutoRigRiggedHand(RiggedHand_L.palm, RiggedFinger_L_Pinky.transform, RiggedFinger_L_Index.transform); RiggedHand_R.AutoRigRiggedHand(RiggedHand_R.palm, RiggedFinger_R_Pinky.transform, RiggedFinger_R_Index.transform); if (ModelGroupName == "" || ModelGroupName != null) { ModelGroupName = transform.name; } HandPoolToPopulate.AddNewGroup(ModelGroupName, RiggedHand_L, RiggedHand_R); modelFingerPointing_L = RiggedHand_L.modelFingerPointing; modelPalmFacing_L = RiggedHand_L.modelPalmFacing; modelFingerPointing_R = RiggedHand_R.modelFingerPointing; modelPalmFacing_R = RiggedHand_R.modelPalmFacing; }
void AutoRigMecanim() { //Assigning these here since this component gets added and used at editor time AnimatorForMapping = gameObject.GetComponent <Animator>(); HandPoolToPopulate = GameObject.FindObjectOfType <HandPool>(); Reset(); //Find hands and assign RiggedHands Transform Hand_L = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftHand); if (Hand_L.GetComponent <RiggedHand>()) { RiggedHand_L = Hand_L.GetComponent <RiggedHand>(); } else { RiggedHand_L = Hand_L.gameObject.AddComponent <RiggedHand>(); } HandTransitionBehavior_L = Hand_L.gameObject.AddComponent <HandDrop>(); RiggedHand_L.Handedness = Chirality.Left; RiggedHand_L.SetEditorLeapPose = false; Transform Hand_R = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightHand); if (Hand_R.GetComponent <RiggedHand>()) { RiggedHand_R = Hand_R.GetComponent <RiggedHand>(); } else { RiggedHand_R = Hand_R.gameObject.AddComponent <RiggedHand>(); } HandTransitionBehavior_R = Hand_R.gameObject.AddComponent <HandDrop>(); RiggedHand_R.Handedness = Chirality.Right; RiggedHand_R.SetEditorLeapPose = false; //Find palms and assign to RiggedHands RiggedHand_L.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftHand); RiggedHand_R.palm = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightHand); //Find Fingers and assign RiggedFingers RiggedFinger_L_Thumb = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftThumbProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_L_Thumb.fingerType = Finger.FingerType.TYPE_THUMB; RiggedFinger_L_Index = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftIndexProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_L_Index.fingerType = Finger.FingerType.TYPE_INDEX; RiggedFinger_L_Mid = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftMiddleProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_L_Mid.fingerType = Finger.FingerType.TYPE_MIDDLE; RiggedFinger_L_Ring = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftRingProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_L_Ring.fingerType = Finger.FingerType.TYPE_RING; RiggedFinger_L_Pinky = AnimatorForMapping.GetBoneTransform(HumanBodyBones.LeftLittleProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_L_Pinky.fingerType = Finger.FingerType.TYPE_PINKY; RiggedFinger_R_Thumb = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightThumbProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_R_Thumb.fingerType = Finger.FingerType.TYPE_THUMB; RiggedFinger_R_Index = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightIndexProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_R_Index.fingerType = Finger.FingerType.TYPE_INDEX; RiggedFinger_R_Mid = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightMiddleProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_R_Mid.fingerType = Finger.FingerType.TYPE_MIDDLE; RiggedFinger_R_Ring = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightRingProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_R_Ring.fingerType = Finger.FingerType.TYPE_RING; RiggedFinger_R_Pinky = AnimatorForMapping.GetBoneTransform(HumanBodyBones.RightLittleProximal).gameObject.AddComponent <RiggedFinger>(); RiggedFinger_R_Pinky.fingerType = Finger.FingerType.TYPE_PINKY; RiggedHand_L.AutoRigRiggedHand(RiggedHand_L.palm, RiggedFinger_L_Pinky.transform, RiggedFinger_L_Index.transform); RiggedHand_R.AutoRigRiggedHand(RiggedHand_R.palm, RiggedFinger_R_Pinky.transform, RiggedFinger_R_Index.transform); if (ModelGroupName == "" || ModelGroupName != null) { ModelGroupName = transform.name; } HandPoolToPopulate.AddNewGroup(ModelGroupName, RiggedHand_L, RiggedHand_R); modelFingerPointing_L = RiggedHand_L.modelFingerPointing; modelPalmFacing_L = RiggedHand_L.modelPalmFacing; modelFingerPointing_R = RiggedHand_R.modelFingerPointing; modelPalmFacing_R = RiggedHand_R.modelPalmFacing; }