Jump to content

Focus 3 development with Wave and Unity's XR Interaction Toolkit


Recommended Posts


A similar question in regards to the Focus Plus. We seem unable to get the controller tracking to work by using the XR toolkit. We originally noticed the headset wasn't tracking but adding the WaveDeviceLayouts seemed to fix it. However, we are unable to get the controllers to track their positions and rotations at all.

Are there dependencies editor side we are missing? I adjusted the Input Actions to the WaveXRController specific bindings but no luck.


Link to comment
Share on other sites

I imported the WaveDeviceLayouts.cs in my project and created my action map like this :




But it doesn't work on the HTC Vive Focus Plus (but it's working on Oculus Quest).



Moreover I don't have the rotation of the head, only the position with this setup :



Can someone explain me how to make the XRRig Input Base working with HTC Vive Focus Plus ? Thank you


  • Unity 2019.4.29
  • HTC Vive Focus Plus
  • XR Plugin Management 4.1.0
  • Vive Input Utility 1.13.4
  • Vive Wave XR Plugin 4.1.1-r3.2
  • Vive Wave XR Plugin - Essence 4.1.1-r.3.2
Link to comment
Share on other sites


I think you should be able to see the device names in the XR Interaction Debug window (Window -> Analysis -> XR Interaction Debugging,  in the Input Devices tab).
If not, also try taking a look in the Input Debugger or take a look at the props at `InputDevices.deviceConnected` via a breakpoint. For debugging purposes, I also recommend stepping into the places in the code that I mentioned in my previous answer.

Link to comment
Share on other sites

I can also confirm that the position as well as the rotation of the headset work with the other tracked pose driver. There are no issues with other headsets like the Quest 2 so far.

16 hours ago, Sean Moakes said:

If you use the other tracked pose driver it should work.


For those who wants to check the characteristics of the connected devices (headset as well as controllers), you can simply use this:

foreach (var inputDevice in InputSystem.devices)
	var name         = inputDevice.displayName;
	var capabilities = inputDevice.description.capabilities;

	var text = $"{GetType()}: {name} {capabilities}";

capabilities is a json string containing the mapping between vive naming and content naming. Here is an exmaple for the Focus 3 Headset and the right controller: https://gist.github.com/PhiSel/97652859e494a97e1db6a4954c8afefe

You can update the WaveDeviceLayouts depending on your needs with these information.

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

@smeerI checked the characteristics like pseltmann said, and everything seems to be right.

However the rotation, both on the controllers and on the HMD itself, don't get translated in game (using the new input system tracked pose drivers)
Any idea what I could try to fix this?

Edited by Stryx
Link to comment
Share on other sites

  • 2 weeks later...

This is the setting for my project, and it work well on focus3 & quest2: 

1. Import WaveDeviceLayouts.cs

2. Change your XR Rig's components value as below



Add Quaternion Fallback for RotationAction was very important, My Focus can track the rotation after doing this.

XRHMD was not required if you don't need quest2 or other device. 


Hope it help for anyone who has same trouble.

Edited by 12345467860785678
Link to comment
Share on other sites

  • 3 weeks later...

Hi. @ap-voidkindly recommended this thread after I started a separate thread on the same issue - Unity APKs install but won't play on Vive Focus 3 - no issues for same VR app on Quest 2 and Pico Neo 3  

However I'm not sure how I import WaveDeviceLayouts.cs into the project to register the new layouts. I assumed this meant importing it as a new asset into my project scripts folder but not sure where to go from there. Any help would be much appreciated.


Link to comment
Share on other sites

  • 5 months later...

Just adding my two cents.

I used WaveDeviceLayouts.cs  from @smeer to much success. But I had problems reading the grip value from the left controller and found that there is a typo in the layout script(ln 162 "LeftControllerGrip" was "LefttControllerGrip").

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...