Beispiel #1
0
 private void DefaultUpdate()
 {
     transform.localPosition = InputTracking.GetLocalPosition(node);
     transform.localRotation = InputTracking.GetLocalRotation(node);
     if (_transformOffset != null)
     {
         _platformHelper.AdjustPlatformSpecificControllerTransform(node, transform, _transformOffset.positionOffset, _transformOffset.rotationOffset);
     }
     else
     {
         _platformHelper.AdjustPlatformSpecificControllerTransform(node, transform, Vector3.zero, Vector3.zero);
     }
 }
Beispiel #2
0
        private void DefaultUpdate()
        {
            if (_saberInput == null)
            {
                _saberInput = InputDevices.GetDeviceAtXRNode(node);
            }

            _saberInput.TryGetFeatureValue(CommonUsages.devicePosition, out _localPos);
            transform.localPosition = _localPos;
            _saberInput.TryGetFeatureValue(CommonUsages.deviceRotation, out _localRot);
            transform.localRotation = _localRot;

            if (_transformOffset != null)
            {
                _platformHelper.AdjustPlatformSpecificControllerTransform(node, transform, _transformOffset.positionOffset, _transformOffset.rotationOffset);
            }
            else
            {
                _platformHelper.AdjustPlatformSpecificControllerTransform(node, transform, Vector3.zero, Vector3.zero);
            }
        }
        private void LateUpdate()
        {
            try
            {
                if (_spawnedAvatar.head && _input.TryGetHeadPose(out Pose headPose))
                {
                    _spawnedAvatar.head.position = headPose.position;
                    _spawnedAvatar.head.rotation = headPose.rotation;
                }

                Vector3 controllerPositionOffset = _mainSettingsModel.controllerPosition;
                Vector3 controllerRotationOffset = _mainSettingsModel.controllerRotation;

                if (_spawnedAvatar.rightHand && _input.TryGetRightHandPose(out Pose rightHandPose))
                {
                    _spawnedAvatar.rightHand.position = rightHandPose.position;
                    _spawnedAvatar.rightHand.rotation = rightHandPose.rotation;

                    _vrPlatformHelper.AdjustPlatformSpecificControllerTransform(XRNode.RightHand, _spawnedAvatar.rightHand, controllerPositionOffset, controllerRotationOffset);
                }

                // mirror across YZ plane for left hand
                controllerPositionOffset = new Vector3(-controllerPositionOffset.x, controllerPositionOffset.y, controllerPositionOffset.z);
                controllerRotationOffset = new Vector3(controllerRotationOffset.x, -controllerRotationOffset.y, -controllerRotationOffset.z);

                if (_spawnedAvatar.leftHand && _input.TryGetLeftHandPose(out Pose leftHandPose))
                {
                    _spawnedAvatar.leftHand.position = leftHandPose.position;
                    _spawnedAvatar.leftHand.rotation = leftHandPose.rotation;

                    _vrPlatformHelper.AdjustPlatformSpecificControllerTransform(XRNode.LeftHand, _spawnedAvatar.leftHand, controllerPositionOffset, controllerRotationOffset);
                }

                if (isCalibrationModeEnabled)
                {
                    if (_spawnedAvatar.pelvis)
                    {
                        _spawnedAvatar.pelvis.position = _spawnedAvatar.avatar.pelvis.position * _spawnedAvatar.scale + new Vector3(0, _spawnedAvatar.verticalPosition, 0);
                        _spawnedAvatar.pelvis.rotation = _spawnedAvatar.avatar.pelvis.rotation;
                    }

                    if (_spawnedAvatar.leftLeg)
                    {
                        _spawnedAvatar.leftLeg.position = _spawnedAvatar.avatar.leftLeg.position * _spawnedAvatar.scale + new Vector3(0, _spawnedAvatar.verticalPosition, 0);
                        _spawnedAvatar.leftLeg.rotation = _spawnedAvatar.avatar.leftLeg.rotation;
                    }

                    if (_spawnedAvatar.rightLeg)
                    {
                        _spawnedAvatar.rightLeg.position = _spawnedAvatar.avatar.rightLeg.position * _spawnedAvatar.scale + new Vector3(0, _spawnedAvatar.verticalPosition, 0);
                        _spawnedAvatar.rightLeg.rotation = _spawnedAvatar.avatar.rightLeg.rotation;
                    }
                }
                else
                {
                    if (_spawnedAvatar.leftLeg && _input.TryGetLeftFootPose(out Pose leftFootPose))
                    {
                        leftFootPose.position = _tailor.ApplyTrackedPointFloorOffset(_spawnedAvatar, leftFootPose.position);

                        _spawnedAvatar.leftLeg.position = leftFootPose.position;
                        _spawnedAvatar.leftLeg.rotation = leftFootPose.rotation;
                    }

                    if (_spawnedAvatar.rightLeg && _input.TryGetRightFootPose(out Pose rightFootPose))
                    {
                        rightFootPose.position = _tailor.ApplyTrackedPointFloorOffset(_spawnedAvatar, rightFootPose.position);

                        _spawnedAvatar.rightLeg.position = rightFootPose.position;
                        _spawnedAvatar.rightLeg.rotation = rightFootPose.rotation;
                    }

                    if (_spawnedAvatar.pelvis && _input.TryGetWaistPose(out Pose pelvisPose))
                    {
                        pelvisPose.position = _tailor.ApplyTrackedPointFloorOffset(_spawnedAvatar, pelvisPose.position);

                        _spawnedAvatar.pelvis.position = pelvisPose.position;
                        _spawnedAvatar.pelvis.rotation = pelvisPose.rotation;
                    }
                }

                if (_spawnedAvatar.body)
                {
                    _spawnedAvatar.body.position = _spawnedAvatar.head.position - (_spawnedAvatar.head.up * 0.1f);

                    var vel = new Vector3(_spawnedAvatar.body.localPosition.x - _prevBodyLocalPosition.x, 0.0f,
                                          _spawnedAvatar.body.localPosition.z - _prevBodyLocalPosition.z);

                    var rot      = Quaternion.Euler(0.0f, _spawnedAvatar.head.localEulerAngles.y, 0.0f);
                    var tiltAxis = Vector3.Cross(transform.up, vel);

                    _spawnedAvatar.body.localRotation = Quaternion.Lerp(_spawnedAvatar.body.localRotation,
                                                                        Quaternion.AngleAxis(vel.magnitude * 1250.0f, tiltAxis) * rot,
                                                                        Time.deltaTime * 10.0f);

                    _prevBodyLocalPosition = _spawnedAvatar.body.localPosition;
                }
            }
            catch (Exception e)
            {
                _logger.Error($"{e.Message}\n{e.StackTrace}");
            }
        }