Exemplo n.º 1
0
        private bool IsPointingWholeHandUpward(OVRSkeleton hand, bool right)
        {
            Vector3 middleDirection = (hand.Bones[(int)BoneId.Hand_MiddleTip].Transform.position - hand.Bones[(int)BoneId.Hand_Middle1].Transform.position).normalized;
            Vector3 ringDirection   = (hand.Bones[(int)BoneId.Hand_RingTip].Transform.position - hand.Bones[(int)BoneId.Hand_Ring1].Transform.position).normalized;

            return(Vector3.Dot(Vector3.up, middleDirection) > 0.7f && Vector3.Dot(Vector3.up, ringDirection) > 0.7f);
        }
Exemplo n.º 2
0
    private IEnumerator Start()
    {
        while (!HandsManager.Instance || !HandsManager.Instance.IsInitialized())
        {
            yield return(null);
        }

        _handManager  = HandsManager.Instance;
        _handSkeleton = GetComponentInParent <OVRSkeleton>();
        _hand         = GetComponentInParent <OVRHand>();

        if (!_handSkeleton || !_hand)
        {
            yield break;
        }

        switch (fingerToFollow)
        {
        case OVRPlugin.HandFinger.Thumb:
            _boneId = OVRSkeleton.BoneId.Hand_Thumb3;
            break;

        case OVRPlugin.HandFinger.Index:
            _boneId = OVRSkeleton.BoneId.Hand_Index3;
            break;

        case OVRPlugin.HandFinger.Middle:
            _boneId = OVRSkeleton.BoneId.Hand_Middle3;
            break;

        case OVRPlugin.HandFinger.Ring:
            _boneId = OVRSkeleton.BoneId.Hand_Ring3;
            break;

        case OVRPlugin.HandFinger.Pinky:
            _boneId = OVRSkeleton.BoneId.Hand_Pinky3;
            break;

        default:
            _boneId = OVRSkeleton.BoneId.Hand_Index3;
            break;
        }

//        var capsuleTriggers = new List<BoneCapsuleTriggerLogic>();
        var boneCapsules = HandsManager.GetCapsulesPerBone(_handSkeleton, _boneId);

//        foreach (var capsule in boneCapsules)
//        {
//            var capsuleTrigger = capsule.CapsuleRigidbody.gameObject.AddComponent<BoneCapsuleTriggerLogic>();
//            capsule.CapsuleCollider.isTrigger = true;
//            capsuleTriggers.Add(capsuleTrigger);
//        }

        if (boneCapsules.Count > 0)
        {
            _capsuleToTrack = boneCapsules[0];
        }

        _isInitialized = true;
    }
 // Start is called before the first frame update
 protected override void Start()
 {
     base.Start();
     hand = GetComponent <OVRHand>();
     ske  = GetComponent <OVRSkeleton>();
     //ske.Freeze = false;
 }
Exemplo n.º 4
0
        protected void UpdateHandData(OVRHand ovrHand, OVRSkeleton ovrSkeleton)
        {
            if (ovrSkeleton != null)
            {
                var bones = ovrSkeleton.Bones;
                foreach (var bone in bones)
                {
                    UpdateBone(bone);
                }

                UpdatePalm();
            }

            CoreServices.InputSystem?.RaiseHandJointsUpdated(InputSource, ControllerHandedness, jointPoses);


            if (IsPinching)
            {
                // If we are already pinching, we make the pinch a bit sticky
                IsPinching = ovrHand.GetFingerPinchStrength(OVRHand.HandFinger.Index) > 0.85f;
            }
            else
            {
                // If not yet pinching, only consider pinching if finger confidence is high
                IsPinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Index) &&
                             ovrHand.GetFingerConfidence(OVRHand.HandFinger.Index) == OVRHand.TrackingConfidence.High;
            }
        }
Exemplo n.º 5
0
        void UpdateHandSkeletonBones(bool isLeftHand)
        {
            OVRSkeleton skeleton = isLeftHand ? _LeftHandOVRSkelton : _RightHandOVRSkelton;

            Dictionary <HumanBodyBones, OVRSkeleton.BoneId> handBoneIdMap;

            handBoneIdMap = isLeftHand ? _LeftHandBoneIdMap : _RightHandBoneIdMap;

            foreach (HumanBodyBones boneKey in handBoneIdMap.Keys)
            {
                OVRSkeleton.BoneId ovrBoneId = handBoneIdMap[boneKey];
                if ((int)ovrBoneId < skeleton.Bones.Count)
                {
                    Transform  skeletonBone  = skeleton.Bones[(int)ovrBoneId].Transform;
                    Quaternion localRotation = skeletonBone.localRotation;

                    // Local pose composition
                    if ((ovrBoneId == OVRSkeleton.BoneId.Hand_Thumb2) || (ovrBoneId == OVRSkeleton.BoneId.Hand_Pinky1))
                    {
                        short     parentBoneIndex = skeleton.Bones[(int)ovrBoneId].ParentBoneIndex;
                        Transform parentBone      = skeleton.Bones[parentBoneIndex].Transform;
                        localRotation = parentBone.localRotation * localRotation;
                    }

                    _Skeleton[boneKey].localRotation = localRotation;
                }
            }
        }
    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 = OVRSkeleton.BoneLabelFromBoneId(skeletonType, (BoneId)i);
                    skeleton.CustomBones[i] = (Transform)EditorGUILayout.ObjectField(boneName, skeleton.CustomBones[i], typeof(Transform), true);
                }
            }
        }
    }
        public OculusQuestArticulatedHand(
            TrackingState trackingState,
            Handedness controllerHandedness,
            IMixedRealityInputSource inputSource          = null,
            MixedRealityInteractionMapping[] interactions = null) : base(trackingState, controllerHandedness, inputSource, interactions)
        {
            var rigs  = GameObject.FindObjectOfType <OVRCameraRig>();
            var hands = rigs.GetComponentsInChildren <OVRHand>();

            foreach (var item in hands)
            {
                switch (((OVRSkeleton.IOVRSkeletonDataProvider)item).GetSkeletonType())
                {
                case OVRSkeleton.SkeletonType.HandLeft:
                    if (controllerHandedness == Handedness.Left)
                    {
                        hand     = item;
                        skeleton = item?.GetComponent <OVRSkeleton>();
                    }
                    break;

                case OVRSkeleton.SkeletonType.HandRight:
                    if (controllerHandedness == Handedness.Right)
                    {
                        hand     = item;
                        skeleton = item?.GetComponent <OVRSkeleton>();
                    }
                    break;
                }
            }

            //var anchor = GameObject.Find((controllerHandedness == Handedness.Left) ? "LeftHandAnchor" : "RightHandAnchor");
            //hand = anchor?.GetComponentInChildren<OVRHand>();
            //skeleton = anchor?.GetComponentInChildren<OVRSkeleton>();
        }
        public override void Enable()
        {
            base.Enable();

            var ovrCameraRig = GameObject.FindObjectOfType <OVRCameraRig>();
            var ovrHands     = ovrCameraRig.GetComponentsInChildren <OVRHand>();

            foreach (var ovrHand in ovrHands)
            {
                var skeltonDataProvider = ovrHand as OVRSkeleton.IOVRSkeletonDataProvider;
                var skeltonType         = skeltonDataProvider.GetSkeletonType();

                var ovrSkelton = ovrHand.GetComponent <OVRSkeleton>();
                if (ovrSkelton == null)
                {
                    continue;
                }

                switch (skeltonType)
                {
                case OVRSkeleton.SkeletonType.HandLeft:
                    leftHand     = ovrHand;
                    leftSkeleton = ovrSkelton;
                    break;

                case OVRSkeleton.SkeletonType.HandRight:
                    rightHand     = ovrHand;
                    rightSkeleton = ovrSkelton;
                    break;
                }
            }
        }
Exemplo n.º 9
0
 private bool IsNeutral(OVRHand hand, OVRSkeleton handSkeleton)
 {
     return(!hand.GetFingerIsPinching(OVRHand.HandFinger.Index) &&
            !hand.GetFingerIsPinching(OVRHand.HandFinger.Middle) &&
            !IsFistClosed(handSkeleton) &&
            !IsPalmFlatWhileThumbIsUp(handSkeleton));
 }
Exemplo n.º 10
0
    private void Awake()
    {
        skeleton = GetComponent <OVRSkeleton>();
#if !UNITY_EDITOR
        hand.gameObject.SetActive(false);
#endif
    }
    private void Initialize()
    {
        _boneVisualizations = new List <BoneVisualization>();
        _ovrSkeleton        = GetComponent <OVRSkeleton>();
        _skeletonGO         = new GameObject("SkeletonRenderer");
        _skeletonGO.transform.SetParent(transform, false);

        if (_skeletonMaterial == null)
        {
            _skeletonMaterial = new Material(Shader.Find("Diffuse"));
        }

        for (int i = 0; i < _ovrSkeleton.Bones.Count; i++)
        {
            var boneVis = new BoneVisualization(
                _skeletonGO,
                _skeletonMaterial,
                _scale,
                _ovrSkeleton.Bones[i].Transform,
                _ovrSkeleton.Bones[i].Transform.parent);

            _boneVisualizations.Add(boneVis);
        }

        _isInitialized = true;
    }
Exemplo n.º 12
0
    void Initialize()
    {
        if (detector == null)
        {
            this.enabled = false;
            return;
        }
        _ovrSkelton = detector.GetComponent <OVRSkeleton>();
        lockOn      = FindObjectOfType <LockOn>();


        if (_ovrSkelton == null)
        {
            return;
        }

        IndexTip = _ovrSkelton.Bones[(int)OVRSkeleton.BoneId.Hand_IndexTip].Transform;
        Index3   = _ovrSkelton.Bones[(int)OVRSkeleton.BoneId.Hand_Index3].Transform;

        StartCoroutine(ShotLoop());
        Addressables.InstantiateAsync(GunCircle).Completed += op =>
        {
            op.Result.transform.parent   = transform;
            op.Result.transform.position = IndexTip.position;
            Circle = op.Result;
        };
    }
Exemplo n.º 13
0
        void AddHandSkeletonBones(SkeletonBuilder skeletonBuilder, bool isLeftHand)
        {
            OVRSkeleton skeleton = isLeftHand ? _LeftHandOVRSkelton : _RightHandOVRSkelton;

            Dictionary <HumanBodyBones, OVRSkeleton.BoneId> handBoneIdMap;

            handBoneIdMap = isLeftHand ? _LeftHandBoneIdMap : _RightHandBoneIdMap;

            foreach (HumanBodyBones boneKey in handBoneIdMap.Keys)
            {
                OVRSkeleton.BoneId ovrBoneId = handBoneIdMap[boneKey];
                if ((int)ovrBoneId < skeleton.Bones.Count)
                {
                    Transform  skeletonBone  = skeleton.BindPoses[(int)ovrBoneId].Transform;
                    Vector3    localPosition = skeletonBone.localPosition;
                    Quaternion localRotation = skeletonBone.localRotation;

                    // Local pose composition
                    if ((ovrBoneId == OVRSkeleton.BoneId.Hand_Thumb2) || (ovrBoneId == OVRSkeleton.BoneId.Hand_Pinky1))
                    {
                        short     parentBoneIndex = skeleton.Bones[(int)ovrBoneId].ParentBoneIndex;
                        Transform parentBone      = skeleton.Bones[parentBoneIndex].Transform;
                        localPosition = parentBone.localPosition + parentBone.localRotation * localPosition;
                        localRotation = parentBone.localRotation * localRotation;
                    }

                    skeletonBuilder.Add(boneKey, _HandBoneParent[boneKey], localPosition, localRotation);
                }
            }
        }
Exemplo n.º 14
0
    private void Initialize()
    {
        _boneVisualizations    = new List <BoneVisualization>();
        _capsuleVisualizations = new List <CapsuleVisualization>();
        _ovrSkeleton           = GetComponent <OVRSkeleton>();
        _skeletonGO            = new GameObject("SkeletonRenderer");
        _skeletonGO.transform.SetParent(transform, false);

        if (_skeletonMaterial == null)
        {
            _skeletonDefaultMaterial = new Material(Shader.Find("Diffuse"));
            _skeletonMaterial        = _skeletonDefaultMaterial;
        }

        if (_capsuleMaterial == null)
        {
            _capsuleDefaultMaterial = new Material(Shader.Find("Diffuse"));
            _capsuleMaterial        = _capsuleDefaultMaterial;
        }

        if (_systemGestureMaterial == null)
        {
            _systemGestureDefaultMaterial       = new Material(Shader.Find("Diffuse"));
            _systemGestureDefaultMaterial.color = Color.blue;
            _systemGestureMaterial = _systemGestureDefaultMaterial;
        }

        if (_ovrSkeleton.IsInitialized)
        {
            for (int i = 0; i < _ovrSkeleton.Bones.Count; i++)
            {
                var boneVis = new BoneVisualization(
                    _skeletonGO,
                    _skeletonMaterial,
                    _systemGestureMaterial,
                    _scale,
                    _ovrSkeleton.Bones[i].Transform,
                    _ovrSkeleton.Bones[i].Transform.parent);

                _boneVisualizations.Add(boneVis);
            }

            if (_renderPhysicsCapsules && _ovrSkeleton.Capsules != null)
            {
                for (int i = 0; i < _ovrSkeleton.Capsules.Count; i++)
                {
                    var capsuleVis = new CapsuleVisualization(
                        _skeletonGO,
                        _capsuleMaterial,
                        _systemGestureMaterial,
                        _scale,
                        _ovrSkeleton.Capsules[i]);

                    _capsuleVisualizations.Add(capsuleVis);
                }
            }

            IsInitialized = true;
        }
    }
Exemplo n.º 15
0
    private void Initialize()
    {
        _boneDots    = new List <BoneDot>();
        _fingerDots  = new List <FingerDot>();
        _ovrSkeleton = GetComponent <OVRSkeleton>();

        for (int i = 0; i < BoneDirectionIndex.Length / 3; i++)
        {
            var boneVis = new BoneDot(
                _ovrSkeleton.Bones[BoneDirectionIndex[i, 0]].Transform,
                _ovrSkeleton.Bones[BoneDirectionIndex[i, 1]].Transform,
                _ovrSkeleton.Bones[BoneDirectionIndex[i, 2]].Transform);

            _boneDots.Add(boneVis);
        }

        for (int i = 0; i < Enum.GetNames(typeof(FingerIndex)).Length; i++)
        {
            FingerDot Fing;
            if (i == 0)
            {
                Fing = new FingerDot(_boneDots[0], _boneDots[1]);
            }
            else
            {
                Fing = new FingerDot(_boneDots[2 + 3 * (i - 1)], _boneDots[3 + 3 * (i - 1)], _boneDots[4 + 3 * (i - 1)]);
            }
            _fingerDots.Add(Fing);
        }

        _isInitialized = true;
    }
Exemplo n.º 16
0
        private void SetupInput()
        {
            cameraRig = GameObject.FindObjectOfType <OVRCameraRig>();
            if (cameraRig == null)
            {
                var       mainCamera   = Camera.main;
                Transform cameraParent = null;
                if (mainCamera != null)
                {
                    cameraParent = mainCamera.transform.parent;

                    // Destroy main camera
                    GameObject.Destroy(cameraParent.gameObject);
                }

                // Instantiate camera rig as a child of the MixedRealityPlayspace
                cameraRig = GameObject.Instantiate(MRTKOculusConfig.Instance.OVRCameraRigPrefab);
            }

            bool useAvatarHands = MRTKOculusConfig.Instance.RenderAvatarHandsInsteadOfController;

            // If using Avatar hands, de-activate ovr controller rendering
            foreach (var controllerHelper in cameraRig.gameObject.GetComponentsInChildren <OVRControllerHelper>())
            {
                controllerHelper.gameObject.SetActive(!useAvatarHands);
            }

            if (useAvatarHands)
            {
                // Initialize the local avatar controller
                GameObject.Instantiate(MRTKOculusConfig.Instance.LocalAvatarPrefab, cameraRig.trackingSpace);
            }

            var ovrHands = cameraRig.GetComponentsInChildren <OVRHand>();

            foreach (var ovrHand in ovrHands)
            {
                var skeltonDataProvider = ovrHand as OVRSkeleton.IOVRSkeletonDataProvider;
                var skeltonType         = skeltonDataProvider.GetSkeletonType();

                var ovrSkelton = ovrHand.GetComponent <OVRSkeleton>();
                if (ovrSkelton == null)
                {
                    continue;
                }

                switch (skeltonType)
                {
                case OVRSkeleton.SkeletonType.HandLeft:
                    leftHand     = ovrHand;
                    leftSkeleton = ovrSkelton;
                    break;

                case OVRSkeleton.SkeletonType.HandRight:
                    rightHand     = ovrHand;
                    rightSkeleton = ovrSkelton;
                    break;
                }
            }
        }
Exemplo n.º 17
0
 private void Awake()
 {
     if (_ovrSkeleton == null)
     {
         _ovrSkeleton = GetComponent <OVRSkeleton>();
     }
 }
Exemplo n.º 18
0
        private float CalculateFingerDistance(OVRSkeleton skeleton, HandPoseData handPose)
        {
            var sumDistance = 0f;
            var discard     = false;
            var i           = 0;
            var fingerBones = skeleton.Bones;

            while (!discard && i < fingerBones.Count)
            {
                var currentData =
                    fingerSkeleton.transform.InverseTransformPoint(fingerBones[i].Transform.position);
                var distance = Vector3.Distance(currentData, handPose.fingerDatas[i]);

                discard = (distance > sensitivity);
                if (discard)
                {
                    sumDistance = Mathf.Infinity;
                }
                else
                {
                    i++;
                    sumDistance += distance;
                }
            }

            return(sumDistance);
        }
Exemplo n.º 19
0
    private void UpdateHand(HandTrackingFingerMap h, OVRSkeleton s)
    {
        if (s == null || s.Bones.Count == 0)
        {
            return;
        }
        SetProperties(h.Hand_Index1, s.Bones[(int)bid.Hand_Index1].Transform);
        SetProperties(h.Hand_Index2, s.Bones[(int)bid.Hand_Index2].Transform);
        SetProperties(h.Hand_Index3, s.Bones[(int)bid.Hand_Index3].Transform);

        SetProperties(h.Hand_Middle1, s.Bones[(int)bid.Hand_Middle1].Transform);
        SetProperties(h.Hand_Middle2, s.Bones[(int)bid.Hand_Middle2].Transform);
        SetProperties(h.Hand_Middle3, s.Bones[(int)bid.Hand_Middle3].Transform);

        SetProperties(h.Hand_Ring1, s.Bones[(int)bid.Hand_Ring1].Transform);
        SetProperties(h.Hand_Ring2, s.Bones[(int)bid.Hand_Ring2].Transform);
        SetProperties(h.Hand_Ring3, s.Bones[(int)bid.Hand_Ring3].Transform);

        //SetProperties(h.Hand_Pinky0, s.Bones[(int)bid.Hand_Pinky0].Transform);
        SetProperties(h.Hand_Pinky1, s.Bones[(int)bid.Hand_Pinky1].Transform);
        SetProperties(h.Hand_Pinky2, s.Bones[(int)bid.Hand_Pinky2].Transform);
        SetProperties(h.Hand_Pinky3, s.Bones[(int)bid.Hand_Pinky3].Transform);

        //SetProperties(h.Hand_Thumb0, s.Bones[(int)bid.Hand_Thumb0].Transform);
        SetProperties(h.Hand_Thumb1, s.Bones[(int)bid.Hand_Thumb1].Transform);
        SetProperties(h.Hand_Thumb2, s.Bones[(int)bid.Hand_Thumb2].Transform);
        SetProperties(h.Hand_Thumb3, s.Bones[(int)bid.Hand_Thumb3].Transform);
    }
        private IEnumerator AttachToolsToHands(Transform[] toolObjects, bool isRightHand)
        {
            HandsManager handsManagerObj = null;

            while ((handsManagerObj = HandsManager.Instance) == null || !handsManagerObj.IsInitialized())
            {
                yield return(null);
            }

            // create set of tools per hand to be safe
            HashSet <Transform> toolObjectSet = new HashSet <Transform>();

            foreach (Transform toolTransform in toolObjects)
            {
                toolObjectSet.Add(toolTransform.transform);
            }

            foreach (Transform toolObject in toolObjectSet)
            {
                OVRSkeleton handSkeletonToAttachTo =
                    isRightHand ? handsManagerObj.RightHandSkeleton : handsManagerObj.LeftHandSkeleton;
                while (handSkeletonToAttachTo == null || handSkeletonToAttachTo.Bones == null)
                {
                    yield return(null);
                }

                AttachToolToHandTransform(toolObject, isRightHand);
            }
        }
Exemplo n.º 21
0
 private void InitializeAxis(OVRSkeleton skeleton)
 {
     axises = new Transform[skeleton.Bones.Count];
     for (int i = 0; i < skeleton.Bones.Count; i++)
     {
         axises[i] = Instantiate <Transform>(axisPrototype, this.transform);
     }
 }
Exemplo n.º 22
0
        private bool IsPointingUpward(OVRSkeleton hand, bool right)
        {
            Vector3 indexDirection        = (hand.Bones[(int)BoneId.Hand_IndexTip].Transform.position - hand.Bones[(int)BoneId.Hand_Index1].Transform.position).normalized;
            Vector3 middleDirection       = (hand.Bones[(int)BoneId.Hand_MiddleTip].Transform.position - hand.Bones[(int)BoneId.Hand_Middle1].Transform.position).normalized;
            float   indexMiddleComparison = Vector3.Dot(indexDirection, middleDirection);

            return(indexMiddleComparison < 0 && Vector3.Dot(indexDirection, Vector3.up) > 0.7f);
        }
Exemplo n.º 23
0
 void Start()
 {
     if (detector == null)
     {
         this.enabled = false;
     }
     _ovrSkelton = detector.gameObject.GetComponent <OVRSkeleton>();
 }
Exemplo n.º 24
0
        private IEnumerator AttachTriggerLogic()
        {
            while (!HandsManager.Instance || !HandsManager.Instance.IsInitialized())
            {
                yield return(null);
            }

            OVRSkeleton handSkeleton = IsRightHandedTool ? HandsManager.Instance.RightHandSkeleton : HandsManager.Instance.LeftHandSkeleton;

            OVRSkeleton.BoneId boneToTestCollisions = OVRSkeleton.BoneId.Hand_Pinky3;
            switch (_fingerToFollow)
            {
            case OVRPlugin.HandFinger.Thumb:
                boneToTestCollisions = OVRSkeleton.BoneId.Hand_Thumb3;
                break;

            case OVRPlugin.HandFinger.Index:
                boneToTestCollisions = OVRSkeleton.BoneId.Hand_Index3;
                break;

            case OVRPlugin.HandFinger.Middle:
                boneToTestCollisions = OVRSkeleton.BoneId.Hand_Middle3;
                break;

            case OVRPlugin.HandFinger.Ring:
                boneToTestCollisions = OVRSkeleton.BoneId.Hand_Ring3;
                break;

            case OVRPlugin.HandFinger.Pinky:
                boneToTestCollisions = OVRSkeleton.BoneId.Hand_Pinky3;
                break;

            default:
                boneToTestCollisions = OVRSkeleton.BoneId.Hand_Index3;
                break;
            }

            List <BoneCapsuleTriggerLogic> boneCapsuleTriggerLogic = new List <BoneCapsuleTriggerLogic>();
            List <OVRBoneCapsule>          boneCapsules            = HandsManager.GetCapsulesPerBone(handSkeleton, boneToTestCollisions);

            foreach (var ovrCapsuleInfo in boneCapsules)
            {
                var boneCapsuleTrigger = ovrCapsuleInfo.CapsuleRigidbody.gameObject.AddComponent <BoneCapsuleTriggerLogic>();
                ovrCapsuleInfo.CapsuleCollider.isTrigger = true;
                boneCapsuleTrigger.ToolTags = ToolTags;
                boneCapsuleTriggerLogic.Add(boneCapsuleTrigger);
            }

            _boneCapsuleTriggerLogic = boneCapsuleTriggerLogic.ToArray();
            // finger tip should have only one capsule
            if (boneCapsules.Count > 0)
            {
                _capsuleToTrack = boneCapsules[0];
            }

            _isInitialized = true;
        }
Exemplo n.º 25
0
    GestureSO CheckRecognition(OVRSkeleton skeleton, List <OVRBone> fingerBones, OVRHand hand)
    {
        if (fingerBones.Count == 0)
        {
            return(null);
        }
        if (!hand.IsTracked)
        {
            return(null);
        }
        if (!hand.IsDataHighConfidence && waitForHighConfidenceData)
        {
            return(null);
        }

        // fist gesture
        float sumDistance = 0;
        bool  isDiscarded = false;

        for (int i = 0; i < fingerBones.Count; i++)
        {
            Vector3 currentData = skeleton.transform.InverseTransformPoint(fingerBones[i].Transform.position);
            float   distance    = Vector3.Distance(fistGesture.fingerPositions[i], currentData);
            if (distance > recognitionThreshold)
            {
                isDiscarded = true;
                break;
            }
            sumDistance = distance;
        }
        if (!isDiscarded)
        {
            return(fistGesture);
        }

        // palm gesture
        sumDistance = 0;
        isDiscarded = false;
        for (int i = 0; i < fingerBones.Count; i++)
        {
            Vector3 currentData = skeleton.transform.InverseTransformPoint(fingerBones[i].Transform.position);
            float   distance    = Vector3.Distance(palmGesture.fingerPositions[i], currentData);
            if (distance > recognitionThreshold)
            {
                isDiscarded = true;
                break;
            }
            sumDistance = distance;
        }
        if (!isDiscarded)
        {
            return(palmGesture);
        }

        return(null);
    }
Exemplo n.º 26
0
        private void Awake()
        {
            controllerHand = GetComponent <SkeletalControllerHand>();
            handAnimator   = GetComponent <Animator>();

            hand     = controllerTransform.GetComponentInChildren <OVRHand>();
            skeleton = hand.GetComponent <OVRSkeleton>();

            GetControllerHashes();
        }
Exemplo n.º 27
0
 private void InitializeBones(ref Dictionary <BoneId, Transform> bones, OVRSkeleton ovrSkeleton)
 {
     foreach (var bone in ovrSkeleton.Bones)
     {
         if (OVRToPosingIDs.TryGetValue(bone.Id, out BoneId id))
         {
             bones.Add(id, bone.Transform);
         }
     }
 }
Exemplo n.º 28
0
    // Start is called before the first frame update
    void Start()
    {
        skeleton = this.GetComponent <OVRSkeleton>();
        hand     = this.GetComponent <OVRHand>();

        foreach (var bone in skeleton.Bones)
        {
            Debug.Log(bone.Id);
        }
    }
Exemplo n.º 29
0
    // Start is called before the first frame update
    void Start()
    {
        l_hand   = GetComponent <OVRHand>();
        l_finger = GetComponent <OVRSkeleton>();
        r_finger = r_hand.GetComponent <OVRSkeleton>();
        r_isIndexFingerPinching = r_hand.GetFingerIsPinching(OVRHand.HandFinger.Index);
        l_isIndexFingerPinching = l_hand.GetFingerIsPinching(OVRHand.HandFinger.Index);

        initial_position = item.transform.position;
        inkRenderer      = ink.GetComponent <Renderer>();
    }
Exemplo n.º 30
0
            public void UpdateFinger(OVRSkeleton s)
            {
                if (s == null || s.Bones.Count == 0)
                {
                    return;
                }

                Transform tracking = s.Bones[(int)boneMapping[name]].Transform;

                SetProperties(transform, tracking);
            }