Search Unity

Question Confused about what to use for Oculus Quest in 2019.4

Discussion in 'VR' started by IgnisIncendio, Mar 14, 2021.

  1. IgnisIncendio

    IgnisIncendio

    Joined:
    Aug 16, 2017
    Posts:
    223
    Hi, I'm developing a game for Quest 2 on Unity 2019.4. However, I would want to be able to support Vive headsets as well. I'm quite lost and confused in what packages I should be using. Here's what I tried, and it seems that there's no single good solution:

    1. New input system + Tracked pose drivers (by new input system) + Legacy VR supported checkbox

    Input works well on Oculus Link (basically just Oculus Rift). However, when building to Oculus Quest, controllers no longer receive input using the new input system.

    Headset still receives input though on Oculus Quest, but that's through the implicit TrackedPoseDriver, that uses legacy input, so I was confused as to why it worked at all. After digging through the code, I realized that it directly used the XR input subsystem.

    So input for Oculus Quest through legacy VR works up to the XR input subsystem layer, but is not properly passed through to the new input system, it seems. This means that I can potentially get input, but only directly from the XR input subsystem, which means I'll miss out on the new input system features like rebinding (which I'll use).

    2. New input system + Tracked pose drivers (by new input system) + XR plugin framework

    Aside from some issues in needing to select Oculus controllers instead of XR controllers for the binding, it works! However, OpenXR seems to be still beta-quality, and does not support haptics (which is quite important for my game). SteamVR XR plugin seems to not support input either due to political reasons?

    Conclusion

    I'm still quite a newbie to this, but this doesn't really feel like a good experience, given I'm still at the starting phases of my project. It's really confusing what I should be using, and I don't really want to build my game on top of a wrong foundation, if that makes sense :)

    So, what are you guys using? And am I missing something or doing things wrong? I feel like it shouldn't be this much effort just to get something basic working.

    Thanks for your help!
     
    Last edited: Mar 14, 2021
  2. IgnisIncendio

    IgnisIncendio

    Joined:
    Aug 16, 2017
    Posts:
    223
    upload_2021-3-14_12-16-10.png

    This is my mental model of how the XR packages relate to each other :p

    But if this is the case, then changing from legacy VR to XR plugins shouldn't affect how the Input System reads from the XR input subsystem, right? In other words, if Oculus Quest input works with the XR plugin + new input system, shouldn't it also work with legacy VR + new input system, due to the XR input subsystem being an abstraction layer?

    Edit so I don't triple post:

    Just gave up and went with official way of doing it :p Basically, new XR plugin framework, new Input System, and the "legacy helper" TrackedPoseDriver (which apparently doesn't use legacy input, but XRNode instead, which is completely fine since I don't need to "rebind" headset/controller tracking via Input System).

    Cons of this method is just no proper Vive support I guess? OpenXR still has missing features and SteamVR XR doesn't work with input properly. Maybe I'll just wait and hope that OpenXR finishes before I finish my game, do the SteamVR XR plugin hack if not, or just ask users to use Revive.

    I took a look at the Escape Room Learn VR project too to see if the official beginner project offers a good solution, and it seems that people there are having problems with Vive too, so no such luck.

    I realized that it's probably possible for me to just go the "completely legacy" route and go with legacy VR and legacy input. So it seems to be a choice between rebinding vs Vive support for now.
     
    Last edited: Mar 14, 2021