In the screenshots, the sticks are set to be Vector1 (One-axis) actions, which can not be bound to the controller’s stick.
These screenshots are using the PSVR2 controllers as an example, but this issue persists between multiple different kinds of VR controllers on SteamVR. The ones I’m aware of are HP Reverb G2 controllers, Vive Cosmos controllers, and Pico Neo 3 & 4 controllers. All of these controllers have the same layout as Oculus/Meta controllers (Two face buttons + one stick for each controller), and should be able to have the actions correctly mapped to the controllers.
This issue does not persist on Oculus/Meta controllers, whether using SteamVR or using the Quest Link OpenXR runtime. I have tested this on my Quest 1, Quest 2, and Rift S, all of which act as intended on both SteamVR and Oculus’ runtime.
This issue has been present since mid-2023, when the VR backend was changed from OpenVR to OpenXR, potentially changing how Roblox communicated input bindings with SteamVR. This doesn’t seem like a difficult issue to solve, but it needs attention as it has been a constant problem barring many VR users from Roblox for nearly two years. Personally, I have to downgrade to the Rift S any time I want to use VR on Roblox, which isn’t an option for many other users.
Update DevForum post:
Expected behavior
The two actions left_hand_joystick_x and left_hand_joystick_y should be combined into a Vector2 action instead of two Vector1 actions, where they would be able to be bound to sticks. Same for right_hand_joystick_x and right_hand_joystick_y. VR functionality in the HMD is otherwise completely functional.
This seems like it should be a feature request to add more control binding options for better compatibility across VR devices. From my understanding, the feature requests category hasn’t been accepting new members for some time, but forum staff are actively looking for a better way to let users get involved with it.
I’m not requesting any sort of feature, the issue I’m describing is broken functionality with generic VR controllers in SteamVR. Rephrased, all of the actions Roblox expects from VR controllers are accounted for in the SteamVR binding menu, but the stick inputs are incorrectly set as Vector1 inputs for each action, which can’t be bound to the sticks properly. This is a bug that was caused by an update to Roblox’s VR backend.
Go to C:\Program Files (x86)\Steam\config\openxr or wherever Steam is installed for you.
If you’ve tried to launch Roblox in VR mode with generic (Non-Oculus) controllers, there should be a 2kb file named: system.generated.openxr.roblox.robloxplayerbeta.exe_khr_simple_controller_0_binding.json
This binding file is practically empty, which is the root of the issue. If you’ve launched Roblox with SteamVR using an Oculus headset, however, there will be a 6.6kb file named: system.generated.openxr.roblox.robloxplayerbeta.exe_oculus_touch_0_binding.json
This file contains the correct bindings, and maps the joystick Vector1 actions to a “Trackpad” input, something that can’t be accessed in the SteamVR binding menu. This input method allows for multiple Vector1 actions to be bound to the different axis of the trackpad, so no wonder you’re unable to set the controls in SteamVR.
THE SOLUTION
This is the part where it gets tacky, as you’ll have to launch the game in VR while hot swapping files on your computer.
Go to C:\Program Files (x86)\Steam\config\openxr (or wherever your Steam installation is) and look for system.generated.openxr.roblox.robloxplayerbeta.exe_khr_simple_controller_0_binding.json
If it isn’t there, make sure you’ve launched Roblox in VR before.
Once you’re there, launch any Roblox game in VR (THIS IS IMPORTANT, THESE FILES ARE RESET EVERY TIME YOU LAUNCH THE GAME!)
While you have Roblox open in VR mode, go into a text editor and open the system.generated.openxr.roblox.robloxplayerbeta.exe_khr_simple_controller_0_binding.json file.
Press CTRL+A and hit backspace to clear the file, then paste in the contents of the default Oculus binding file. If you don’t have an Oculus headset and this file has not been automatically generated, it’s linked here:
Once you’ve replaced the contents of the khr_simple_controller_0_binding json with that of the oculus_touch_0_binding json, save the file and open the SteamVR bindings menu.
If the official binding is now listed as Bindings from OpenXR for oculus_touch congratulations, you did it!
Last, you’ll need to create a personal profile for your bindings, as they will reset next time you launch the game if you don’t. To do this, just go over to the official oculus_touch bindings and do View -> Edit this binding -> Save personal binding
|||||||||||||| NOTE: Please make sure you upload the binding to workshop as well, spare others the headache! ||||||||||||||
When saving your binding, the sticks should look like this
Don’t panic over not seeing the inputs bound, they are absolutely there, just not showing up.
END
This is still an issue, I’m just offering a short-term fix while Roblox is busy lounging on vacation (seriously, finding out what caused the issue has convinced me a fix is even easier than I initially thought, do better Roblox!)
I haven’t seen anyone else online discover a fix for this issue in the nearly two years it has been a problem, so I just thought it would be nice to share what I found.
Even though I’m marking this post as a solution, it is STILL AN ISSUE as of now, and this is only a temporary hacky solution.
Hey, I’ve tried this but haven’t been able to get it to work. Did everything, copied the oculus file contents into the other file, etc etc. Do you have any idea how I could get this working? This is the only plausible and recent solution I’ve found as almost no one has the issue due to not owning the headset. I’ve been trying to get the G2 to work with roblox for years.
Thanks