Quest WebXR: tracked-controls reports false controller disconnects when a Touch source moves to trackedSources
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 65/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, threejs
Direzione di ricerca
The issue is in src/systems/tracked-controls.js, specifically the onInputSourcesChange function. Start by reading the WebXR API documentation on inputSources and trackedSources. Examine how the system currently builds its controller list and where it listens for changes. 'Done' means tracked-controls correctly accounts for sources in both collections, preventing false disconnects during migration.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
On Meta Quest 3 in Meta Quest Browser, during an immersive WebXR session requesting hand-tracking and tracked-sources, a Touch controller can move from XRSession.inputSources to XRSession.trackedSources while remaining physically present and continuing to provide valid raw pose and gamepad data. A-Frame then drops it from the tracked-controls controller list. The controller component emits controllerdisconnected, and the model/pose freezes until the source returns to inputSources.
Current A-Frame master still has this lifecycle gap: tracked-controls.js, onInputSourcesChange listens only to inputsourceschange and assigns this.controllers = xrSession.inputSources (line 43).
Steps to reproduce
- Run an immersive A-Frame scene on a Meta Quest 3 in Meta Quest Browser, requesting hand-tracking and tracked-sources.
- Attach
meta-touch-controlsortracked-controlsfor a Touch controller hand. - Switch between hand and controller tracking until the runtime moves the controller representation from
inputSourcestotrackedSources. - Observe
controllerdisconnectedand a frozen A-Frame controller model while raw WebXR still reports a moving pose and gamepad. Observe reconnection when the controller returns toinputSources.
Expected behavior
A logical Touch controller should not disconnect solely because the runtime reclassifies its source between inputSources and trackedSources. When trackedSources is available, tracked-controls should account for both collections for presence, preferring an eligible inputSources candidate when both collections contain candidates. Hand-only or hybrid entries should not become controller button/ray authority unless they provide the expected controller capabilities.
Actual behavior
During migration, tracked-controls' list no longer contains the controller, so controller components emit controllerdisconnected and the model freezes. Raw WebXR instrumentation continued to receive pose/gamepad updates during the same interval. Representative observed sequence: source changed from in to tr, A-Frame disconnected, a raw sample showed about 36 mm of movement with a gamepad present and source location tr, then the source changed from tr to in. A later occurrence showed about 72 mm of raw movement during the apparent disconnect.
Environment
- Meta Quest 3; Meta Quest Browser (version not captured in the supplied diagnostics)
- Immersive WebXR; hand-tracking and tracked-sources
- A-Frame 1.5.0 in the application where first diagnosed
- Current master inspected 2026-09-23; the cited system remains
inputSources-only
Related issue
This is distinct from #5584, which describes a controller not appearing when oculus-touch-controls and hand-tracking-controls are combined. That closed issue does not describe a live source migration followed by a false disconnect while raw tracking remains active.
- Lingua principale
- JavaScript
- Stelle
- 17.7k
- Fork
- 4.4k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di aframevr/aframe
-
Removing grabbable does not remove obb-colliderForse già presa @mrxz l’ha presa 29 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Uncaught TypeError: Cannot read properties of null (reading 'cancelAnimationFrame') on session endAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 45/100
-
TypeError: session.requestAnimationFrame is not a function when re-entering XR session after exitAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
-
tracked-controls-webxr does not update entity position when referenceSpaceType is bounded-floorAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
Tutte le issue di aframevr/aframe
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
awesome-dsh-plugin/awesome-dsh-plugin#9184 ·
I maintainer di solito rispondono entro 1 giorno
-
CloudredirectAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
NanmiCoder/dsh-agent-teams#277 ·
I maintainer di solito rispondono entro 1 giorno
-
[ordering-review] workshop order graph: 1 confirmed ordering problem, 3 cycles are false positivesAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
githubnext/gh-aw-workshop#4943 ·
I maintainer di solito rispondono entro 1 giorno