Object placed above MRUK furniture "jumps" up/down when pushing right thumbstick
Context Unity + Meta XR Building Blocks. I'm building an AR app (Passthrough + MR Utility Kit). I show a world-space UI dialog above an MRUK table (Canvas in world space, RectTransform placed at the table center + slight lift to sit on the surface -> all via script). Symptom Whenever I push the right controller thumbstick downward, the dialog appears to "jump" ~0.5 m up, and pushing again makes it jump back down. This happened both on the device and in the Simulator. What it actually is It's not the dialog moving. Logging showed Camera.main.transform.position.y toggling between two values (1.047 <-> 1.547), while the dialog's world Y stayed constant.Solved39Views0likes1CommentPlease have native support for locomotion devices
It would be great to have native support for integrating VR locomotion devices (Freeaim VR Shoes, Kat Walk, Virtuix Omni, Natural Locomotion, etc.) similar to how it works with SteamVR. In SteamVR, we can implement our own driver that will translate movement from the device to joystick commands. SteamVR loads the driver and then forwards the joystick commands. We can also retrieve useful information from the headset via the driver and send it to the device, such as HMD position and orientation. Currently, to support a locomotion device on the Meta Quest, game developers have to integrate support. This isn't scalable and is a lot more work than if the locomotion manufacturer could just implement a driver/plugin/background process that works for all games that have locomotion.30Views0likes1CommentNative alternate locomotion solutions
I would love if at the native Operating System level, if the Meta Quest could support alternate locomotion solutions. Take the Kat Walk C2 (which yes, I do have one), if it could network directly to it via their Kat Nexus, you could then go controller free using hand tracking, and free walk in infinite space with your legs. The Kat Walk and your legs would now replace the thumbsticks. But open that up for ALL alternate locomotion solutions devices. Toggle the option “on”, then pick your type of alternate locomotion; in my case, an omnidirectional treadmill/slidemill, but other solutions as well. VR shoes where you march in place, and others. But whatever your locomotion solution, it would either replace or augment your controllers, and now all games natively are replacing my thumb sticks. It’s just a thought…customLocomotionSystem example has compilation issues
CustomLocomotionSystem from https://developers.meta.com/horizon/documentation/spatial-sdk/spatial-sdk-inputsystem-locomotionsystem is having compilation issues. When I import the code, I get compilation errors. For e.g. unable to resolve InputResult, hand, etc. Please note that the "InputSystem" example is working perfectly fine, just the customLocomotionSystem is having issues. Can someone help fix the code / documentation please482Views0likes1CommentUnity VR: 1P character not moving with camera when teleporting
I got full body tracking working as per the Meta SDK Movement samples. However, when I add functionality to move the camera rig through teleport locomotion and rotation locomotion, my character's body is not moving and rotating with the camera. How can I make my character move with the camera when teleporting and rotating via the controller?314Views0likes1Comment(Unity) OVRPlayerController- How to get OVRPlayerController to move with OVRCameraRig
I'm working off the standard OVRPlayerController, which has an OVRCameraRig as its child. This is a game where I need thumbstick locomotion (which the OVRPlayerControllerProvides), but I also need roomscale movement. In other words, I need to make sure that when the player moves physically, his in game avatar should also move. Currently whats happening is that when the player moves physically, the OVRcameraRig moves with him, but the parent OVRPlayerContoller does not move. This is an issue because I need my OVRPlayerController to move with my player at all times for proper collision tracking and targeting by Hostile AI. What is the best way to achieve this? Iv'e tried a few ways to make it work but wondering what the cleanest solution is. I'll also need hand tracking for this game. Perhaps I should simply use the AvatarSDK standard avatar and make it a child of a Character Controller for thumb stick movement? thanks for the help!20KViews1like11CommentsAlternating between or simultaneously using linear Locomotion and Teleporting
Hi! My team is working on a Unity VR project using the Meta XR SDK version 60.0 targeting Quest devices. We want to offer users the choice to switch between linear movement and teleportation whenever they want, so they can use whichever they feel more comfortable with. However, we've encountered some unexpected incompatibilities between the two modes. For linear movement we are using the OVR Player Controller with a Character Controller, as in the Core SDK's OVRPlayerController Prefab, and a TeleportInteractor is doing the teleporting. Each on their own are working fine, but when the PlayerController and CharacterController are active, the player avatar is often getting thrown across the scene, seemingly bouncing off environment geometry, possibly even the ground. And when we try to set up a toggle, deactivating the Player/Character Controllers in favor of teleporting, deactivating them after they have already been in play messes with the teleport height, usually setting the viewpoint at knee height. Has anyone here found a way to use both at the same time or toggle between them cleanly, like we are trying to? Thanks in advance for every hint and suggestion what we could try!963Views0likes1CommentHow do I integrate teleportation prefab with Netcode
I'm doing a multiplayer project using Unity Netcode. I'm using the LocomotionControllerInteractorGroup prefab to handle the teleportation, and there is a script from the SDK called PlayerLocomotor that changes the player position. Based on the Netcode tutorial, I should handle movement through NetworkBehavior rather than MonoBehavior, so I duplicated the script and changed it to a NetworkBehavior script, but the modified one is not functioning at all. I attached the modified script below. Could someone give me some hits about how to integrate the locomotion prefab into the NetworkBehavior, please? using System; using System.Collections; using System.Collections.Generic; using Oculus.Interaction; using Oculus.Interaction.Locomotion; using Unity.Netcode; using UnityEngine; public class RPCPlayer : NetworkBehaviour, ILocomotionEventHandler { // Start is called before the first frame update [SerializeField] private Transform _playerOrigin; [SerializeField] private Transform _playerHead; private Action<LocomotionEvent, Pose> _whenLocomotionEventHandled = delegate { }; public event Action<LocomotionEvent, Pose> WhenLocomotionEventHandled { add { _whenLocomotionEventHandled += value; } remove { _whenLocomotionEventHandled -= value; } } protected bool _started; private Queue<LocomotionEvent> _deferredEvent = new Queue<LocomotionEvent>(); protected virtual void Start() { this.BeginStart(ref _started); this.AssertField(_playerOrigin, nameof(_playerOrigin)); this.AssertField(_playerHead, nameof(_playerHead)); this.EndStart(ref _started); } private void OnEnable() { if (_started) { //this.RegisterEndOfFrameCallback(MovePlayer); //It's not available to the NetworkBehavior MovePlayer(); } } private void OnDisable() { if (_started) { _deferredEvent.Clear(); //this.UnregisterEndOfFrameCallback(); } } public void HandleLocomotionEvent(LocomotionEvent locomotionEvent) { _deferredEvent.Enqueue(locomotionEvent); } //[ServerRpc (RequireOwnership = false)] private void MovePlayer() { while (_deferredEvent.Count > 0) { LocomotionEvent locomotionEvent = _deferredEvent.Dequeue(); Pose originalPose = _playerOrigin.GetPose(); MovePlayer(locomotionEvent.Pose.position, locomotionEvent.Translation); RotatePlayer(locomotionEvent.Pose.rotation, locomotionEvent.Rotation); Pose delta = PoseUtils.Delta(originalPose, _playerOrigin.GetPose()); _whenLocomotionEventHandled.Invoke(locomotionEvent, delta); } } private void MovePlayer(Vector3 targetPosition, LocomotionEvent.TranslationType translationMode) { if (translationMode == LocomotionEvent.TranslationType.None) { return; } if (translationMode == LocomotionEvent.TranslationType.Absolute) { Vector3 positionOffset = _playerOrigin.position - _playerHead.position; positionOffset.y = 0f; _playerOrigin.position = targetPosition + positionOffset; } else if (translationMode == LocomotionEvent.TranslationType.AbsoluteEyeLevel) { Vector3 positionOffset = _playerOrigin.position - _playerHead.position; _playerOrigin.position = targetPosition + positionOffset; } else if (translationMode == LocomotionEvent.TranslationType.Relative) { _playerOrigin.position = _playerOrigin.position + targetPosition; } else if (translationMode == LocomotionEvent.TranslationType.Velocity) { _playerOrigin.position = _playerOrigin.position + targetPosition * Time.deltaTime; } } private void RotatePlayer(Quaternion targetRotation, LocomotionEvent.RotationType rotationMode) { if (rotationMode == LocomotionEvent.RotationType.None) { return; } Vector3 originalHeadPosition = _playerHead.position; if (rotationMode == LocomotionEvent.RotationType.Absolute) { Vector3 headForward = Vector3.ProjectOnPlane(_playerHead.forward, _playerOrigin.up).normalized; Quaternion headFlatRotation = Quaternion.LookRotation(headForward, _playerOrigin.up); Quaternion rotationOffset = Quaternion.Inverse(_playerOrigin.rotation) * headFlatRotation; _playerOrigin.rotation = Quaternion.Inverse(rotationOffset) * targetRotation; } else if (rotationMode == LocomotionEvent.RotationType.Relative) { _playerOrigin.rotation = targetRotation * _playerOrigin.rotation; } else if (rotationMode == LocomotionEvent.RotationType.Velocity) { targetRotation.ToAngleAxis(out float angle, out Vector3 axis); angle *= Time.deltaTime; _playerOrigin.rotation = Quaternion.AngleAxis(angle, axis) * _playerOrigin.rotation; } _playerOrigin.position = _playerOrigin.position + originalHeadPosition - _playerHead.position; } #region Inject public void InjectAllPlayerLocomotor(Transform playerOrigin, Transform playerHead) { InjectPlayerOrigin(playerOrigin); InjectPlayerHead(playerHead); } public void InjectPlayerOrigin(Transform playerOrigin) { _playerOrigin = playerOrigin; } public void InjectPlayerHead(Transform playerHead) { _playerHead = playerHead; } #endregion }1.4KViews1like1CommentXR Interaction Toolkit Locomotion Up and Down
Hello, I am trying to implement a 3D Movement (Forward/Backward, Turn left/right, Up/Down)with XR Interaction Toolkit. For Forward and Backward and Turning around, it works easy with XRI Default Input Actions. But the Up/Down Movement doesn't work. Does anybody has a solution? Actually I setup my aircraft, for Left Controller Joy Stick (Up/Down Movement) for Forward/backward and Right Controller Joy Stick (Left/Right Movement) for turning around. I want to setup for Right Controller Joy Stick (Up/Down Movement) for Up/Down in the 3D area. In the Continuous Move Provider script, I tried to change the Forward Source other than main Camera but the Transform remains always the same. Thanks in Advance!2.2KViews1like2CommentsLocomotion and Example Scenes documentation outdated for Meta XR All In One?
Hi. Is anybody using the new Meta XR All In One package yet? I am currently working on a Project and wanted to start from scratch with the latest OVR version, to have the option to implement hand tracking, spacial anchors, etc. at a later point. In the past I mainly used VRIF and XR interaction Toolkit, so I wanted to learn OVR from scratch using the quite good documentation. But now it turns out, that the documentation does not seem to be up to date: I wanted to add locomotion but neither is there an "Active State Finger Visual" on the "Locomotion Hand Interactor Group" nor do I have the example scenes mentioned in this tutorial: https://developer.oculus.com/documentation/unity/unity-isdk-create-locomotion-interactions/ Can anybody tell me how locomotion is done in the latest iteration of the package? Thanks in advance TH1.5KViews1like1Comment