public void UpdateIsPinching(IHand hand)
            {
                PinchStrength = hand.GetFingerPinchStrength(_finger);
                bool isPinching = hand.GetFingerIsPinching(_finger);

                if (isPinching != IsPinching)
                {
                    IsPinchingChanged = true;
                }
                IsPinching = isPinching;
            }
Beispiel #2
0
        private void UpdateVisual()
        {
            if (_rayInteractor.State == InteractorState.Disabled)
            {
                _cursor.SetActive(false);
                return;
            }

            if (_rayInteractor.CollisionInfo == null)
            {
                _cursor.SetActive(false);
                return;
            }

            if (!_cursor.activeSelf)
            {
                _cursor.SetActive(true);
            }

            Vector3 collisionNormal = _rayInteractor.CollisionInfo.Value.Normal;

            this.transform.position = _rayInteractor.End + collisionNormal * _offsetAlongNormal;
            this.transform.rotation = Quaternion.LookRotation(_rayInteractor.CollisionInfo.Value.Normal, Vector3.up);

            if (_rayInteractor.State == InteractorState.Select)
            {
                _selectObject.SetActive(true);
                _renderer.material.SetFloat(_shaderRadialGradientScale, 0.25f);
                _renderer.material.SetFloat(_shaderRadialGradientIntensity, 1f);
                _renderer.material.SetFloat(_shaderRadialGradientBackgroundOpacity, 1f);
                _renderer.material.SetColor(_shaderOutlineColor, _outlineColor);
            }
            else
            {
                _selectObject.SetActive(false);
                var mappedPinchStrength = Hand.GetFingerPinchStrength(HandFinger.Index);
                var radialScale         = 1f - mappedPinchStrength;
                radialScale = Mathf.Max(radialScale, .11f);
                _renderer.material.SetFloat(_shaderRadialGradientScale, radialScale);
                _renderer.material.SetFloat(_shaderRadialGradientIntensity, mappedPinchStrength);
                _renderer.material.SetFloat(_shaderRadialGradientBackgroundOpacity, Mathf.Lerp(0.3f, 0.7f, mappedPinchStrength));
                _renderer.material.SetColor(_shaderOutlineColor, _outlineColor);
            }
        }
Beispiel #3
0
        private void UpdateVisual()
        {
            if (!Hand.IsTrackedDataValid ||
                _rayInteractor.State == InteractorState.Disabled)
            {
                if (_skinnedMeshRenderer.enabled)
                {
                    _skinnedMeshRenderer.enabled = false;
                }
                return;
            }

            if (!_skinnedMeshRenderer.enabled)
            {
                _skinnedMeshRenderer.enabled = true;
            }

            if (!Hand.GetJointPose(HandJointId.HandIndex3, out var poseIndex3))
            {
                return;
            }
            if (!Hand.GetJointPose(HandJointId.HandThumb3, out var poseThumb3))
            {
                return;
            }

            var     isPinching    = _rayInteractor.State == InteractorState.Select;
            Vector3 midIndexThumb = Vector3.Lerp(poseThumb3.position, poseIndex3.position, 0.5f);

            var thisTransform = transform;
            var deltaTarget   = (_rayInteractor.End - thisTransform.position).normalized;

            thisTransform.position   = midIndexThumb;
            thisTransform.rotation   = Quaternion.LookRotation(deltaTarget, Vector3.up);
            thisTransform.localScale = Vector3.one * Hand.Scale;

            var mappedPinchStrength = _remapCurve.Evaluate(Hand.GetFingerPinchStrength(HandFinger.Index));

            _skinnedMeshRenderer.material.color = isPinching ? Color.white : new Color(1f, 1f, 1f, Mathf.Lerp(_alphaRange.x, _alphaRange.y, mappedPinchStrength));
            _skinnedMeshRenderer.SetBlendShapeWeight(0, mappedPinchStrength * 100f);
            _skinnedMeshRenderer.SetBlendShapeWeight(1, mappedPinchStrength * 100f);
        }