public void UpdateIsPinching(IHand hand) { PinchStrength = hand.GetFingerPinchStrength(_finger); bool isPinching = hand.GetFingerIsPinching(_finger); if (isPinching != IsPinching) { IsPinchingChanged = true; } IsPinching = isPinching; }
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); } }
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); }