public override void OnInspectorGUI() { DrawPropertiesExcluding(serializedObject, new string[] { "_customBones" }); serializedObject.ApplyModifiedProperties(); OVRCustomSkeleton skeleton = (OVRCustomSkeleton)target; OVRSkeleton.SkeletonType skeletonType = skeleton.GetSkeletonType(); if (skeletonType == OVRSkeleton.SkeletonType.None) { EditorGUILayout.HelpBox("Please select a SkeletonType.", MessageType.Warning); } else { if (GUILayout.Button("Auto Map Bones")) { skeleton.TryAutoMapBonesByName(); EditorUtility.SetDirty(skeleton); EditorSceneManager.MarkSceneDirty(skeleton.gameObject.scene); } EditorGUILayout.LabelField("Bones", EditorStyles.boldLabel); BoneId start = skeleton.GetCurrentStartBoneId(); BoneId end = skeleton.GetCurrentEndBoneId(); if (start != BoneId.Invalid && end != BoneId.Invalid) { for (int i = (int)start; i < (int)end; ++i) { string boneName = BoneLabelFromBoneId(skeletonType, (BoneId)i); skeleton.CustomBones[i] = (Transform)EditorGUILayout.ObjectField(boneName, skeleton.CustomBones[i], typeof(Transform), true); } } } }
/// <summary> /// Utility to get the OVRSkeleton for a given hand (left or right) /// </summary> private OVRSkeleton GetOVRSkeleton(OVRSkeleton.SkeletonType skeletonType) { foreach (var skeleton in GetComponentsInChildren <OVRSkeleton>()) { if (skeleton.GetSkeletonType() == skeletonType) { return(skeleton); } } Debug.LogError("[PinchManager] Could not get OVRSkeleton with skeleton type '" + skeletonType + "'."); return(null); }
void FindHandData(Side side) { // Camera OVRCameraRig cameraRig = GameObject.FindObjectOfType <OVRCameraRig>(); if (!cameraRig) { return; } if (!HPTK.core.trackingSpace) { HPTK.core.trackingSpace = cameraRig.trackingSpace; } if (!HPTK.core.trackedCamera) { HPTK.core.trackedCamera = cameraRig.trackingSpace.Find("CenterEyeAnchor").transform; } // Hands OVRHand[] ovrHands = cameraRig.GetComponentsInChildren <OVRHand>(); foreach (var ovrHand in ovrHands) { OVRSkeleton.IOVRSkeletonDataProvider skeltonDataProvider = ovrHand as OVRSkeleton.IOVRSkeletonDataProvider; OVRSkeleton.SkeletonType skeletonType = skeltonDataProvider.GetSkeletonType(); OVRSkeleton ovrSkelton = ovrHand.GetComponent <OVRSkeleton>(); if (ovrSkelton == null) { continue; } if ((skeletonType == OVRSkeleton.SkeletonType.HandLeft && side == Side.Left) || (skeletonType == OVRSkeleton.SkeletonType.HandRight && side == Side.Right)) { handData = ovrHand; boneData = ovrSkelton; } else { continue; } } }
// force aliased enum values to the more appropriate value private static string BoneLabelFromBoneId(OVRSkeleton.SkeletonType skeletonType, BoneId boneId) { if (skeletonType == OVRSkeleton.SkeletonType.HandLeft || skeletonType == OVRSkeleton.SkeletonType.HandRight) { switch (boneId) { case OVRSkeleton.BoneId.Hand_WristRoot: return("Hand_WristRoot"); case OVRSkeleton.BoneId.Hand_ForearmStub: return("Hand_ForearmStub"); case OVRSkeleton.BoneId.Hand_Thumb0: return("Hand_Thumb0"); case OVRSkeleton.BoneId.Hand_Thumb1: return("Hand_Thumb1"); case OVRSkeleton.BoneId.Hand_Thumb2: return("Hand_Thumb2"); case OVRSkeleton.BoneId.Hand_Thumb3: return("Hand_Thumb3"); case OVRSkeleton.BoneId.Hand_Index1: return("Hand_Index1"); case OVRSkeleton.BoneId.Hand_Index2: return("Hand_Index2"); case OVRSkeleton.BoneId.Hand_Index3: return("Hand_Index3"); case OVRSkeleton.BoneId.Hand_Middle1: return("Hand_Middle1"); case OVRSkeleton.BoneId.Hand_Middle2: return("Hand_Middle2"); case OVRSkeleton.BoneId.Hand_Middle3: return("Hand_Middle3"); case OVRSkeleton.BoneId.Hand_Ring1: return("Hand_Ring1"); case OVRSkeleton.BoneId.Hand_Ring2: return("Hand_Ring2"); case OVRSkeleton.BoneId.Hand_Ring3: return("Hand_Ring3"); case OVRSkeleton.BoneId.Hand_Pinky0: return("Hand_Pinky0"); case OVRSkeleton.BoneId.Hand_Pinky1: return("Hand_Pinky1"); case OVRSkeleton.BoneId.Hand_Pinky2: return("Hand_Pinky2"); case OVRSkeleton.BoneId.Hand_Pinky3: return("Hand_Pinky3"); case OVRSkeleton.BoneId.Hand_ThumbTip: return("Hand_ThumbTip"); case OVRSkeleton.BoneId.Hand_IndexTip: return("Hand_IndexTip"); case OVRSkeleton.BoneId.Hand_MiddleTip: return("Hand_MiddleTip"); case OVRSkeleton.BoneId.Hand_RingTip: return("Hand_RingTip"); case OVRSkeleton.BoneId.Hand_PinkyTip: return("Hand_PinkyTip"); default: return("Hand_Unknown"); } } else { return("Skeleton_Unknown"); } }
private bool InitializeHandHiererachy() { // If we already have a valid hand root, proceed if (handRoot != null) { return(true); } OVRSkeleton.SkeletonType skeletonType = GetSkeletonTypeFromHandedness(handedness); if (skeletonType != OVRSkeleton.SkeletonType.HandLeft && skeletonType != OVRSkeleton.SkeletonType.HandRight) { return(false); } string handSignififer = skeletonType == OVRSkeleton.SkeletonType.HandLeft ? "l" : "r"; string handStructure = "b_" + handSignififer; handRoot = transform; // Wrist string wristString = handStructure + "_wrist"; handWrist = handRoot.Find(wristString); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_WristRoot, rootTrackedTransform); Debug.Log("Found: " + handWrist); // Index string indexString = handStructure + "_index"; string indexString1 = indexString + "1"; handIndex1 = handWrist.Find(indexString1); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Index1, handIndex1); Debug.Log("Found: " + handIndex1); string indexString2 = indexString + "2"; handIndex2 = handIndex1.Find(indexString2); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Index2, handIndex2); string indexString3 = indexString + "3"; handIndex3 = handIndex2.Find(indexString3); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Index3, handIndex3); // Middle string middleString = handStructure + "_middle"; string middleString1 = middleString + "1"; handMiddle1 = handWrist.Find(middleString1); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Middle1, handMiddle1); string middleString2 = middleString + "2"; handMiddle2 = handMiddle1.Find(middleString2); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Middle2, handMiddle2); string middleString3 = middleString + "3"; handMiddle3 = handMiddle2.Find(middleString3); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Middle3, handMiddle3); // Pinky string pinkyString = handStructure + "_pinky"; string pinkyString0 = pinkyString + "0"; handPinky0 = handWrist.Find(pinkyString0); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Pinky0, handPinky0); string pinkyString1 = pinkyString + "1"; handPinky1 = handPinky0.Find(pinkyString1); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Pinky1, handPinky1); string pinkyString2 = pinkyString + "2"; handPinky2 = handPinky1.Find(pinkyString2); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Pinky2, handPinky2); string pinkyString3 = pinkyString + "3"; handPinky3 = handPinky2.Find(pinkyString3); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Pinky3, handPinky3); // Ring string ringString = handStructure + "_ring"; string ringString1 = ringString + "1"; handRing1 = handWrist.Find(ringString1); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Ring1, handRing1); string ringString2 = ringString + "2"; handRing2 = handRing1.Find(ringString2); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Ring2, handRing2); string ringString3 = ringString + "3"; handRing3 = handRing2.Find(ringString3); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Ring3, handRing3); // Thumb string thumbString = handStructure + "_thumb"; string thumbString0 = thumbString + "0"; handThumb0 = handWrist.Find(thumbString0); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Thumb0, handThumb0); string thumbString1 = thumbString + "1"; handThumb1 = handThumb0.Find(thumbString1); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Thumb1, handThumb1); string thumbString2 = thumbString + "2"; handThumb2 = handThumb1.Find(thumbString2); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Thumb2, handThumb2); string thumbString3 = thumbString + "3"; handThumb3 = handThumb2.Find(thumbString3); boneIdMapping.Add(OVRSkeleton.BoneId.Hand_Thumb3, handThumb3); Debug.Log($"Hand {handedness} initilized"); return(true); }
void Find() { // Camera OVRCameraRig cameraRig = GameObject.FindObjectOfType <OVRCameraRig>(); HPTKCore.core.model.trackedCamera = cameraRig.trackingSpace.Find("CenterEyeAnchor").transform; // Reparenting if (!rootHPTK) { rootHPTK = transform; } if (trackingSpaceIsParent) { rootHPTK.parent = cameraRig.trackingSpace; } // Hands OVRHand[] ovrHands = cameraRig.GetComponentsInChildren <OVRHand>(); foreach (var ovrHand in ovrHands) { OVRSkeleton.IOVRSkeletonDataProvider skeltonDataProvider = ovrHand as OVRSkeleton.IOVRSkeletonDataProvider; OVRSkeleton.SkeletonType skeltonType = skeltonDataProvider.GetSkeletonType(); // SMR SkinnedMeshRenderer smr = ovrHand.GetComponent <SkinnedMeshRenderer>(); if (disableDefaultSMR) { smr.enabled = false; } if (applyMatToDefaultSMR) { smr.material = matToApply; } OVRSkeleton ovrSkelton = ovrHand.GetComponent <OVRSkeleton>(); if (ovrSkelton == null) { continue; } // Fix for static hands in Unity Editor #if UNITY_EDITOR ovrSkelton.ShouldUpdateBonePoses = true; #endif // IDPs if (findOVRHandsForIdps) { switch (skeltonType) { case OVRSkeleton.SkeletonType.HandLeft: if (!ovrSkeletonTrackerL.handData || !ovrSkeletonTrackerL.boneData) { ovrSkeletonTrackerL.handData = ovrHand; ovrSkeletonTrackerL.boneData = ovrSkelton; } break; case OVRSkeleton.SkeletonType.HandRight: if (!ovrSkeletonTrackerR.handData || !ovrSkeletonTrackerR.boneData) { ovrSkeletonTrackerR.handData = ovrHand; ovrSkeletonTrackerR.boneData = ovrSkelton; } break; } } } }
void Apply() { // Camera HPTKCore.core.model.trackedCamera = cameraRig.trackingSpace.Find("CenterEyeAnchor").transform; // Reparenting if (!rootHPTK) { rootHPTK = transform; } if (trackingSpaceIsParent) { rootHPTK.parent = cameraRig.trackingSpace; } // Hands OVRHand[] ovrHands = cameraRig.GetComponentsInChildren <OVRHand>(); foreach (var ovrHand in ovrHands) { OVRSkeleton.IOVRSkeletonDataProvider skeltonDataProvider = ovrHand as OVRSkeleton.IOVRSkeletonDataProvider; OVRSkeleton.SkeletonType skeltonType = skeltonDataProvider.GetSkeletonType(); // SMR SkinnedMeshRenderer smr = ovrHand.GetComponent <SkinnedMeshRenderer>(); if (disableDefaultSMR) { smr.enabled = false; } OVRSkeleton ovrSkelton = ovrHand.GetComponent <OVRSkeleton>(); if (ovrSkelton == null) { continue; } // IDPs if (findOVRHandsForIdps) { switch (skeltonType) { case OVRSkeleton.SkeletonType.HandLeft: if (!ovrSkeletonTrackerL.handData || !ovrSkeletonTrackerL.boneData) { ovrSkeletonTrackerL.handData = ovrHand; ovrSkeletonTrackerL.boneData = ovrSkelton; } defaultSMR_L = smr; // Copy materials from origin if (copyDefaultSMRMaterial) { Debug.Log("-------------"); Debug.Log(smr.name); Debug.Log(avatar.viewModel.leftHand.name); Debug.Log(avatar.viewModel.leftHand.viewModel.slave.skinnedMR.name); Debug.Log("-------------"); avatar.viewModel.leftHand.viewModel.slave.skinnedMR.material = defaultSMR_L.material; } break; case OVRSkeleton.SkeletonType.HandRight: if (!ovrSkeletonTrackerR.handData || !ovrSkeletonTrackerR.boneData) { ovrSkeletonTrackerR.handData = ovrHand; ovrSkeletonTrackerR.boneData = ovrSkelton; } defaultSMR_R = smr; // Copy materials from origin if (copyDefaultSMRMaterial) { avatar.viewModel.rightHand.viewModel.slave.skinnedMR.material = defaultSMR_R.material; } break; } } // Apply materials to origin if (applyMatToDefaultSMR) { smr.material = matToApply; } } ready = true; onReady.Invoke(); }