コード例 #1
0
    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);
                }
            }
        }
    }
コード例 #2
0
    /// <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);
    }
コード例 #3
0
        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;
                }
            }
        }
コード例 #4
0
    // 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");
        }
    }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: OVRFinder.cs プロジェクト: kyubuns/HPTK-Sample
    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;
                }
            }
        }
    }
コード例 #7
0
    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();
    }