Browser WebXR apps not recognizing correct size of space
Hey! I've been trying and testing some WebXR apps for the past few days and they have been working fine with my space setup (the scan of my room). But since this morning, it's pretty messed up. The scale of the WebXR environment is not working properly in the different apps I've been trying (my own and others). It seems like it is doing a weird scaling of everything (the UI 3D panels, the objects, the planes and surfaces, etc). I thought it could be the browser and WebXR itself, but the quest device feels weird as a whole. The main menu in passthrough mode tracks a bit of my head movement, which was not happening previously. Also, I cannot focus very well on passthrough mode and looking to my surrounding makes me feel dizzy. There seems to be an offset between the real world and representations in MR (you can see that happening with my hands in the second video). This was not happening yesterday and the days before. Here is a recording of what's happening both in the browser and in the normal menu and passthrough interaction. https://horizon.meta.com/shares/Y5SSCJhQQbs1PwveM5rrfkIQVKXgfg https://horizon.meta.com/shares/iTQZ6bNkM5zH3hdRjK3KWwJFbL0WfJ I tried factory resetting and it didn't help. Rescanning of the space, didn't help.40Views0likes1CommentHand physics Capsules not following the fingers
Hello, So I have a working project with the new version 13, when I tick "Enable Physics Capsules" in OVR Skeleton script, inside the OVRHandPrefab, the capsules behave wired. So, as soon as the hands are detected, the capsules appear basically at the tip of the selected fingers (this, through the InteractableToolsSDKDriver, and the InteractableToolsCreator script), but as soon as I move my fingers, the position of the capsules remain the same, it doesnt update the position in relation to the finger, but it travels with the whole hand. I wonder if there is a bug regarding the attached parent? Then, if I hide the hands, as soon as they appear again the capsules appear in the correct position of the finger tip, just to stay there again when the finger moves. I am guessing this is not the desired behavior, right? Thank you!8.2KViews1like22CommentsCannot open HandsTrainSample because Engine modules are out of date.
I wanted to try out Hand Tracking with UE4, and I just did git clone the engine source from Oculus github, and build the engine following the instruction in the Oculus website. I cloned 1e09d2f (the latest one) from branch 4.25, which is release "oculus-4.25.3-release-1.51.0-v19.0" and built the engine using Visual Studio 2019. It worked fine, I could make a new project. I could also open HandSample project and it works great with Oculus Quest & Link. But I couldn't open HandsTrainSample. I built the engine and clicked Debug/Start a new instance in Visual Studio, then it opened up the editor. Then I chose the sample, but I couldn't open it. I also tried to open .uproject directly but it just says "The following modules are missing or build with a different engine version: HandsTrainSample Would you like to rebuild them now?" and if i go Yes, then I get Missing Modules error with the message "Engine modules are out of date, and cannot be compiled while the engine is running. Please build through your IDE." and I couldn't open it. I guess I have to find and fix errors in VS but I don't even know where I can get .sln file for this project so which I need to see errors in VS. I tried Generate Visual Studio project files from HandsTrainSample.uproject but .sln file wasn't generated in the same directory although I got no error. This is my first time to build the engine from source and I might misunderstand some stuff. I hope someone helps me with it.4.7KViews1like5CommentsPointable Canvas Event works with Quest Link, but not when built to headset.
Hello fellow devs, I am using the RayCanvasFlat that comes with the samples for Meta Interaction SDK for my project. There is a wall object in an architecture scene and I want to be able to use the ray pinch functionality to select this wall and call an event to pop up a menu to interact with this wall. I used the RayCanvasFlat prefab and removed all text and buttons from it, duplicated it 3 times and placed them on 3 sides of the exposed wall: I added a pointable canvas unity event wrapper and in the select part I added my menu scaler. Here is the pointable canvas module settings: When I run the scene in unity editor, and I point and pinch at the canvases around the wall, I get the event called successfully and the menu pops up. However, when I make the build and run the build on Quest 3 untethered, pointing at the canvases still works (I see the cursor and the click effect) but the unity event to scale up the menu does not work... Any ideas how I can debug this or fix it? If there is also a way for me to use this ray interactor + pinch without a canvas where I can see the cursor similar to how it appears on canvas, I would be grateful for directions too. Thanks in advance!1.3KViews0likes1CommentMeta Interaction SDK and Mouseclicks
I am using the Meta XR interaction Toolkit and its Components. My Problem: I am in Playmode on my PC and have a Oculus hooked up via Link. I have 2 Displays. Display 1 (VR) Where the the Player is in a room with an interactable Panel. (Grab, Point, Select works) Display 2(PC) I have an UI Button. When its clicked something should happen. As far as i know the Meta SDK needs the PointableCanvasModule for the Events to work. But then my Mouseclick on Display 2 doesnt register. When i have the Standalone Input Module active, my mouseclicks works, but i can't interact with the Canvas anymore. Video that shows the Problem: https://streamable.com/uin4ms How can i use my Mouseclick and the VR Hands at the same time? Big_Flex I read that you work on the Interaction SDK team, so i tagged you š Thanks for the help554Views0likes0CommentsHand Grab Tracking
Hey Folks, I am designing a circular weapon(image is attached below) that can be hold by the player with two hand. When the player squeezes the weapon with both hands, it shoots. It is functioning well, but I am encountering an issue. I am using the two hand grab free transform hand grab component provided by the Meta SDK, and when the player performs a quick operation with the weapon, it rotates on the horizontal axis. Any help would be appreciated.345Views0likes0CommentsWith OpenXR and the MSFT hand interaction extension, what's the correct way to detect "Menu" button?
I can see that in Quest, interaction_profiles/microsoft/hand_interaction is supported, and this lets me detect the actions /input/squeeze/value and input/select/value. What I can't seem to do is detect when the hand is turned towards the user such that the "menu" button is visible. What is the "correct" way to detect this, so I can handle the menu button with OpenXR?2.5KViews0likes3CommentsHow to modify Grabable scripts?
I renamed HandGrabInteractable to HandleLeft and confirmed that the grab functionality is working well. Additionally, I want to save the position when HandleLeft is grabbed and moved, and create a new object at that position. So, I wanted to add a public bool DropDown variable inside the Grabbable script and set DropDown = true during EndTransform(), but it keeps getting deleted automatically. I'm not sure how to solve this issue. Please help. + Additionally, the PointableElement, IGrabbable properties are not enabled. (The font color does not change.) Note : Visual Studio 2022 , Unity 2022.03.20f1,meta XR interaction SDK 63.00 /* * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * Licensed under the Oculus SDK License Agreement (the "License"); * you may not use the Oculus SDK except in compliance with the License, * which is provided at the time of installation or download, or which * otherwise accompanies this software in either electronic or hard copy form. * * You may obtain a copy of the License at * * https://developer.oculus.com/licenses/oculussdk/ * * Unless required by applicable law or agreed to in writing, the Oculus SDK * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System.Collections.Generic; using UnityEngine; namespace Oculus.Interaction { /// <summary> /// Moves the object it's attached to when an Interactor selects that object. /// </summary> public class Grabbable : PointableElement, IGrabbable { /// <summary> /// A One Grab...Transformer component, which should be attached to the grabbable object. Defaults to One Grab Free Transformer. /// If you set the Two Grab Transformer property and still want to use one hand for grabs, you must set this property as well. /// </summary> [Tooltip("A One Grab...Transformer component, which should be attached to the grabbable object. Defaults to One Grab Free Transformer. If you set the Two Grab Transformer property and still want to use one hand for grabs, you must set this property as well.")] [SerializeField, Interface(typeof(ITransformer))] [Optional(OptionalAttribute.Flag.AutoGenerated)] private UnityEngine.Object _oneGrabTransformer = null; /// <summary> /// A Two Grab...Transformer component, which should be attached to the grabbable object. /// If you set this property but also want to use one hand for grabs, you must set the One Grab Transformer property. /// </summary> [Tooltip("A Two Grab...Transformer component, which should be attached to the grabbable object. If you set this property but also want to use one hand for grabs, you must set the One Grab Transformer property.")] [SerializeField, Interface(typeof(ITransformer)), Optional] private UnityEngine.Object _twoGrabTransformer = null; [Tooltip("The target transform of the Grabbable. If unassigned, " + "the transform of this GameObject will be used.")] [SerializeField] [Optional(OptionalAttribute.Flag.AutoGenerated)] private Transform _targetTransform; /// <summary> /// The maximum number of grab points. Can be either -1 (unlimited), 1, or 2. /// </summary> [Tooltip("The maximum number of grab points. Can be either -1 (unlimited), 1, or 2.")] [SerializeField] private int _maxGrabPoints = -1; public int MaxGrabPoints { get { return _maxGrabPoints; } set { _maxGrabPoints = value; } } public Transform Transform => _targetTransform; public List<Pose> GrabPoints => _selectingPoints; private ITransformer _activeTransformer = null; private ITransformer OneGrabTransformer; private ITransformer TwoGrabTransformer; protected override void Awake() { base.Awake(); OneGrabTransformer = _oneGrabTransformer as ITransformer; TwoGrabTransformer = _twoGrabTransformer as ITransformer; } protected override void Start() { this.BeginStart(ref _started, () => base.Start()); if (_targetTransform == null) { _targetTransform = transform; } if (_oneGrabTransformer != null) { this.AssertField(OneGrabTransformer, nameof(OneGrabTransformer)); OneGrabTransformer.Initialize(this); } if (_twoGrabTransformer != null) { this.AssertField(TwoGrabTransformer, nameof(TwoGrabTransformer)); TwoGrabTransformer.Initialize(this); } // Create a default if no transformers assigned if (OneGrabTransformer == null && TwoGrabTransformer == null) { OneGrabFreeTransformer defaultTransformer = gameObject.AddComponent<OneGrabFreeTransformer>(); _oneGrabTransformer = defaultTransformer; OneGrabTransformer = defaultTransformer; OneGrabTransformer.Initialize(this); } this.EndStart(ref _started); } public override void ProcessPointerEvent(PointerEvent evt) { switch (evt.Type) { case PointerEventType.Select: EndTransform(); break; case PointerEventType.Unselect: ForceMove(evt); EndTransform(); break; case PointerEventType.Cancel: EndTransform(); break; } base.ProcessPointerEvent(evt); switch (evt.Type) { case PointerEventType.Select: BeginTransform(); break; case PointerEventType.Unselect: BeginTransform(); break; case PointerEventType.Move: UpdateTransform(); break; } } private void ForceMove(PointerEvent releaseEvent) { PointerEvent moveEvent = new PointerEvent(releaseEvent.Identifier, PointerEventType.Move, releaseEvent.Pose, releaseEvent.Data); ProcessPointerEvent(moveEvent); } // Whenever we change the number of grab points, we save the // current transform data private void BeginTransform() { // End the transform on any existing transformer before we // begin the new one EndTransform(); int useGrabPoints = _selectingPoints.Count; if (_maxGrabPoints != -1) { useGrabPoints = Mathf.Min(useGrabPoints, _maxGrabPoints); } switch (useGrabPoints) { case 1: _activeTransformer = OneGrabTransformer; break; case 2: _activeTransformer = TwoGrabTransformer; break; default: _activeTransformer = null; break; } if (_activeTransformer == null) { return; } _activeTransformer.BeginTransform(); } private void UpdateTransform() { if (_activeTransformer == null) { return; } _activeTransformer.UpdateTransform(); } private void EndTransform() { if (_activeTransformer == null) { return; } _activeTransformer.EndTransform(); _activeTransformer = null; } protected override void OnDisable() { if (_started) { EndTransform(); } base.OnDisable(); } #region Inject public void InjectOptionalOneGrabTransformer(ITransformer transformer) { _oneGrabTransformer = transformer as UnityEngine.Object; OneGrabTransformer = transformer; } public void InjectOptionalTwoGrabTransformer(ITransformer transformer) { _twoGrabTransformer = transformer as UnityEngine.Object; TwoGrabTransformer = transformer; } public void InjectOptionalTargetTransform(Transform targetTransform) { _targetTransform = targetTransform; } #endregion } } ā1.3KViews0likes0CommentsUnity Help Needed: Preserving Object Position After Grab and Instantiating New Object
I renamed HandGrabInteractable to HandleLeft and confirmed that the grab functionality is working well. Additionally, I want to save the position when HandleLeft is grabbed and moved, and create a new object at that position. So, I wanted to add a public bool DropDown variable inside the Grabbable script and set DropDown = true during EndTransform(), but it keeps getting deleted automatically. I'm not sure how to solve this issue. Please help.. + the PointableElement, IGrabbable properties are not enabled. (The font color does not change.) Note: Visual Studio 2022, Unity 2022.03.20f1, meta XR interaction SDK 63.00 /* * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * Licensed under the Oculus SDK License Agreement (the "License"); * you may not use the Oculus SDK except in compliance with the License, * which is provided at the time of installation or download, or which * otherwise accompanies this software in either electronic or hard copy form. * * You may obtain a copy of the License at * * https://developer.oculus.com/licenses/oculussdk/ * * Unless required by applicable law or agreed to in writing, the Oculus SDK * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System.Collections.Generic; using UnityEngine; namespace Oculus.Interaction { /// <summary> /// Moves the object it's attached to when an Interactor selects that object. /// </summary> public class Grabbable : PointableElement, IGrabbable { /// <summary> /// A One Grab...Transformer component, which should be attached to the grabbable object. Defaults to One Grab Free Transformer. /// If you set the Two Grab Transformer property and still want to use one hand for grabs, you must set this property as well. /// </summary> [Tooltip("A One Grab...Transformer component, which should be attached to the grabbable object. Defaults to One Grab Free Transformer. If you set the Two Grab Transformer property and still want to use one hand for grabs, you must set this property as well.")] [SerializeField, Interface(typeof(ITransformer))] [Optional(OptionalAttribute.Flag.AutoGenerated)] private UnityEngine.Object _oneGrabTransformer = null; /// <summary> /// A Two Grab...Transformer component, which should be attached to the grabbable object. /// If you set this property but also want to use one hand for grabs, you must set the One Grab Transformer property. /// </summary> [Tooltip("A Two Grab...Transformer component, which should be attached to the grabbable object. If you set this property but also want to use one hand for grabs, you must set the One Grab Transformer property.")] [SerializeField, Interface(typeof(ITransformer)), Optional] private UnityEngine.Object _twoGrabTransformer = null; [Tooltip("The target transform of the Grabbable. If unassigned, " + "the transform of this GameObject will be used.")] [SerializeField] [Optional(OptionalAttribute.Flag.AutoGenerated)] private Transform _targetTransform; /// <summary> /// The maximum number of grab points. Can be either -1 (unlimited), 1, or 2. /// </summary> [Tooltip("The maximum number of grab points. Can be either -1 (unlimited), 1, or 2.")] [SerializeField] private int _maxGrabPoints = -1; public int MaxGrabPoints { get { return _maxGrabPoints; } set { _maxGrabPoints = value; } } public Transform Transform => _targetTransform; public List<Pose> GrabPoints => _selectingPoints; private ITransformer _activeTransformer = null; private ITransformer OneGrabTransformer; private ITransformer TwoGrabTransformer; protected override void Awake() { base.Awake(); OneGrabTransformer = _oneGrabTransformer as ITransformer; TwoGrabTransformer = _twoGrabTransformer as ITransformer; } protected override void Start() { this.BeginStart(ref _started, () => base.Start()); if (_targetTransform == null) { _targetTransform = transform; } if (_oneGrabTransformer != null) { this.AssertField(OneGrabTransformer, nameof(OneGrabTransformer)); OneGrabTransformer.Initialize(this); } if (_twoGrabTransformer != null) { this.AssertField(TwoGrabTransformer, nameof(TwoGrabTransformer)); TwoGrabTransformer.Initialize(this); } // Create a default if no transformers assigned if (OneGrabTransformer == null && TwoGrabTransformer == null) { OneGrabFreeTransformer defaultTransformer = gameObject.AddComponent<OneGrabFreeTransformer>(); _oneGrabTransformer = defaultTransformer; OneGrabTransformer = defaultTransformer; OneGrabTransformer.Initialize(this); } this.EndStart(ref _started); } public override void ProcessPointerEvent(PointerEvent evt) { switch (evt.Type) { case PointerEventType.Select: EndTransform(); break; case PointerEventType.Unselect: ForceMove(evt); EndTransform(); break; case PointerEventType.Cancel: EndTransform(); break; } base.ProcessPointerEvent(evt); switch (evt.Type) { case PointerEventType.Select: BeginTransform(); break; case PointerEventType.Unselect: BeginTransform(); break; case PointerEventType.Move: UpdateTransform(); break; } } private void ForceMove(PointerEvent releaseEvent) { PointerEvent moveEvent = new PointerEvent(releaseEvent.Identifier, PointerEventType.Move, releaseEvent.Pose, releaseEvent.Data); ProcessPointerEvent(moveEvent); } // Whenever we change the number of grab points, we save the // current transform data private void BeginTransform() { // End the transform on any existing transformer before we // begin the new one EndTransform(); int useGrabPoints = _selectingPoints.Count; if (_maxGrabPoints != -1) { useGrabPoints = Mathf.Min(useGrabPoints, _maxGrabPoints); } switch (useGrabPoints) { case 1: _activeTransformer = OneGrabTransformer; break; case 2: _activeTransformer = TwoGrabTransformer; break; default: _activeTransformer = null; break; } if (_activeTransformer == null) { return; } _activeTransformer.BeginTransform(); } private void UpdateTransform() { if (_activeTransformer == null) { return; } _activeTransformer.UpdateTransform(); } private void EndTransform() { if (_activeTransformer == null) { return; } _activeTransformer.EndTransform(); _activeTransformer = null; } protected override void OnDisable() { if (_started) { EndTransform(); } base.OnDisable(); } #region Inject public void InjectOptionalOneGrabTransformer(ITransformer transformer) { _oneGrabTransformer = transformer as UnityEngine.Object; OneGrabTransformer = transformer; } public void InjectOptionalTwoGrabTransformer(ITransformer transformer) { _twoGrabTransformer = transformer as UnityEngine.Object; TwoGrabTransformer = transformer; } public void InjectOptionalTargetTransform(Transform targetTransform) { _targetTransform = targetTransform; } #endregion } }890Views0likes1Comment"Black" non-transparent hands when using the default Meta shader
When using Meta's shader for the hands + changing the style of passthrough, the hands transparency is not rendered correctly. It happens in both Quest 2 and 3. I'm sure this was working just a few days ago. Could it be caused by the new v64 OS update? Has anyone else seen this recently? This: Instead of509Views0likes0Comments