Direct VR movement

Is there a clean and easy way to have a character capsule automatically be moved to match an HMDs location?

I need this to fix the rotation center for controller-based turning not being the center of the head (but rather the center of the capsule), which causes extreme motion sickness. It’s like you’re doing some kind of poledance…

The default pawn seems to compensate for this and turns you around the HMD automatically, but I need the CharacterMovementComponent for direct controls, so I can’t use it.

Do I have to track the delta-Transforms of the HMD or the final camera transforms (if either is even possible) and move the capsule along every frame or is there another way?

I am working with SteamVR by the way. Maybe the problem is chaperone related? I’m only just starting out with VR.

I guess for the “manual” approach to work, I would have to re-center the playspace on the HMD every frame. Otherwise the camera gets moved back to its relative location all the time, when I really need to set its relative position to origin after moving the capsule to its world position.

So, I found this BP function “Reset Orientation and Position” under head mounted display and I am simply

  • setting capsule position to camera world position (XY, not Z)

  • setting relative camera location to origin (XY)

  • calling Reset Orientation and Position (position only)

… on every tick.

It basically works, but I think it creates some ugly twitching when turning. I’m not entirely sure actually, because I’m still getting some motion sickness from smooth turning anyway, but I think this is worse than usual. Any ideas how to improve it?

edit: a big problem is that I have to reset Z-position as well, when I only want to reset XY. This leads to camera height not matching the HMD position anymore (without further workarounds…).