I've been tasked with developing a fast-paced local multiplayer VR experience for the Oculus Quest 2 set in an actual 36m² (6x6) room. The position/rotation of the players' avatars in virtual space and of the actual players in physical space should be synchronized as accurately as possible, as if those spaces were one and the same — be it only so players don't smash into each other during gameplay.
If I draw a 6x6 guardian from the center of the room and then start the app facing forward, everything is where it should be and to scale: I will be at the center of the virtual space, facing forward. If I quit the app, move around within the guardian (even with the headset in sleep mode) and launch the app again, I'll start where I moved to, facing whichever direction I'm actually facing. Nice.
But if I leave the guardian's boundaries, all hell breaks loose. Upon reentry, the virtual space and physical space are completely out of sync, and will remain so even if I reset the app. At this point, the only thing I can do is redraw the guardian. It appears the headset looses tracks of the virtual space's relation to the guardian and unsuccessfully tries to recreate it. I should note that the guardian itself didn't move; its boundaries still match that of the physical room.
I've tried several workarounds, including this one here. It works in that the front always remain more-or-less at the front, but it appears to be inaccurate and those small error quickly pile up. Moreover, the way it works means the room's boundaries eventually end up not matching the guardian's any longer.
Is there any way to ensure robust, long-term virtual-physical synchronicity? Or at least some sort of hack that ensures the room and the guardian can be made to remain reasonably aligned at all times?
Assistance would be greatly appreciated. Cheers!
In OVRManager there are three different types of Tracking Origin Type: Eye Level, Floor Level, and Stage. Are you set to "Stage?"
Check "Local vs. Stage" section: