Cannot bind Touch Controller joystick axis!

So I originally was running my project in 4.19, but I switched versions in the process as I shall explain. I use a Quest 2 linked to PC with virtual desktop.

I’m taking a VR Unreal course and I’m following along trying to get a good base to start making my game ideas. Everything was going really well until I ran into problems mapping input to the Touch Controllers. I was able to get the axis mapping for the touch controllers working fine by adding the _Y or _X to the input mapping names in the editor, I had my character walking around and the joysticks worked great. I was using the Motion Controller input options.

All was good until I tried adding actions with the Motion Controller FaceButtons. None of the face buttons were responding to any of the input from the Touch controllers. The Joysticks worked, the triggers worked, the grab buttons worked, but the face buttons, no matter what, would not work. I tried every possible input option Unreal had, and nothing was working. I eventually found that Motion Controller (L/R) Shoulder made one of the face buttons work, but this still wasn’t acceptable.

Looking around online I thought my best bet would be to upgrade versions so I installed 4.26, and lo and behold, the problems flipped. Now I could ONLY get action mapping to work. I could only get the triggers, face buttons, and grip buttons to work, and when trying to set up an axis from Oculus Touch (L) Thumbstick Y or X I get nothing. I can map an action event to Oculus Touch (L) Thumbstick Up, but that is silly and not a real way to make movement a viable option. I cannot get a any sort of axis input from these joysticks and it’s driving me nuts!

I have since tried going back to 4.19, tried 4.23 (I think), and now I am currently messing around with 4.25 to no avail. This is a really frustrating roadblock, i’ve read anything and everything that should help and none of it has. The information on using SteamVR Input is very unclear. I am currently doing everything with C++ but I may have to look into blueprints soon.

ANY HELP WOULD BE SO APPRECIATED

It might be a good idea to go through the Use part SteamVR Input Quickstart guide to make sure everything is properly set up:

Do the axis actions show up in the SteamVR binding interface at all? If not, do they show up in <Project>\Config\SteamVRBindings\steamvr_manifest.json?

Yes the axis and the actions show up in the .json files

While this is a webpage I haven’t seen before, it’s only for versions 4.23 and before. If I end up giving up on 4.25 i’ll give this page a shot.

EDIT: I have given up on 4.25 and I am reinstalling 4.23. I am now facing an issue where I cannot get my HMD to load the UE4 editor. UE4 is getting the input from the headset/controllers, but when I put on the HMD I just see the SteamVR Environment and it says UE4 Editor Waiting… Tried disabling the Oculus Splash screen like was suggested online but no avail.

The plugin should work just the same for 4.24 and above, apart from that it is now included in the engine and doesn’t have to be installed separately.

I have moved back down to 4.23 because 4.25 was no longer allowing me to use SteamVR, it kept getting stuck at “UE4 Editor Waiting…”

4.23 is letting me play in VR mode at least. Using the SteamVR Input Plugin I am able to map all the buttons except the axis still. I launched their sample project and I am able to get axis input from the controllers working in their sample porject. They have made their input mappings in Blueprint though, so it isn’t really helping me. Very frustrating that there is practically no help for the C++ user.

I am including a picture of my action mapping below so I can explain my issue more.
It is not super easy to see in the picture, but under “MoveForward_Y” I have mapped:

Gamepad Left Thumbstick Y-Axis
MotionController (L) Thumbstick Y
[STEAMVR INTERNAL] Temporary Action 5 (This is created automatically and I cannot delete it)
SteamVR Oculus Touch (L) Joystick Y

The Gamepad Left Thumbstick Y-Axis works 100% correctly, so I really cannot figure out why SteamVR Oculus Touch (L) Joystick Y would not be working. In the sample project they name the axis the same thing and use the same mappings and it works, the only difference being they are handling the axis in a blueprint. I’ve been dealing with this issue for WEEKS NOW! I’m losing my mind. Every controller binding works except the Joystick X and Y.

335118-screenshot-2021-04-07-153911.png

Does the action appear in the SteamVR binding interface at all?

I just opened the SteamVR Binding interface and I think we could be on the right track now.
Here is what I found:

As you can see all the boolean actions (Teleport, ShowTeleportMarker, HideTeleportMarker) were put in automatically and they are working. As you can see the Left Joystick (the axis I am trying to bind) is unbound. When I go to edit it and click on Position, I see the following:

I see no listed “Vector2” actions. If I click on Touch or Click I see the following:

So it appears that my MoveForward_Y is a Vector1 action. I will note that at the bottom of the GitHub getting started page it says the following:

“Vector2 Actions - As Unreal doesn’t have a concept of a Vector2 action we auto group two vector1 actions with names that end with _X and _Y. For example, to create a mapping for MoveLeft you will need a MoveLeft_X and a MoveLeft_Y that you bind to their corresponding controller axis. See the sample inputs for an example. (SteamVR Input Menu - Add Sample Inputs)”

So I think this is the right vein to follow. I am going to continue messing around with this and comparing to the same Steam Input screen for the example project. Thank you kindly for your help so far!!

THE PROBLEM HAS BEEN FIXED!!!

I really cannot describe how overjoyed I am right now.
So the final fix was achieved using the following steps:

  1. In the Unreal Input Settings, set up your Axis like this:

335127-screenshot-2021-04-07-163440.png

Essentially you are picking a name for the joystick, in this case MoveLeft, and then creating two axis for the joystick MoveLeft_Y, and MoveLeft_X. This is something I had done before but had missed a crucial step.

2.Open the SteamVR Input menu, and go ahead and click down each button in order, “Regen Action”, “Regen Controller”, “Reload Action”, and then finally, open the SteamVR Binding Dashboard.

335126-screenshot-2021-04-07-163721.png

Click on “Edit” next to “Current Binding” and it will bring up the binding menu. In my case I was trying to assign the Left Joystick, so I click on the little edit pencil, and then click on “None” lined up with Position. You should now see “MoveLeft” (or whatever you “named your joystick” like I had called it) as a listed Vector2 action. Congrats! You’re so close!

Then finally you just need to map your inputs in your C++ file. I will show my setup:

As you can see, HERE is where you will be using _X and _Y again. The Vector2 “MoveLeft” only exists for the sake of SteamVR. Unreal only has Vector1, so steam is essentially sending two Vector1 values that get split up by Unreal. So now just use these axis as you would with any other controller.

I really hope this helps someone else, because this is a problem I have been dealing with for far far too long. Thank you so much to everyone who helped get me here. I am overjoyed.

2 Likes

Rectus you are the MF MAN!!!