01-25-2022 08:03 AM - edited 01-25-2022 08:10 AM
I have discovered a bug when using the "Get Motion Controller Data" function. I am using Unreal Engine version 4.27.0. I have yet to test this in the latest version of the engine.
The bug occurs when moving the actor around. The data found in XRMotionControllerData which is given by the function "Get Motion Controller Data" gives position and rotation data for the motion controllers which doesn't seem to be up to date with exactly where the actor has moved.
In my testing project, I added code which simply draws this data as a red beam. I also added code which moves the actor.
The red beam and the teleport beam both appear to be lagging behind the actor.
The bug also occurs when rotating the actor.
It does not occur when moving the motion controller around, it only seems to occur when moving the actor around.
When using the location and forward vector of the MotionControllerComponent World Location as a scene component, the issue does not occur.
All of these effects have been observed both from VR Preview via oculus link with the Quest 2, and a version launched to the Quest 2.
I have verified this in a fresh VR Template project. The bug is present without any modifications.
Here's a drive folder with some recordings of the issue, and some screenshots of some code. The videos are labeled with what's happening, and in what environment.
https://drive.google.com/drive/folders/17ExfnqBW2rH_rx2OSSZfiqHlOupmeeTz?usp=sharing
07-09-2022 05:38 PM
You've possibly found a workaround by now, but just for visibility:
I noticed the same behavior in 5.0. And I'm not sure if it's so much a bug, as a timing mismatch on motion controller movement vs character capsule movement.
So instead of updating based on MotionControllerData on Tick, I bound a function to my character's OnCharacterMovementUpdated dispatcher which does that same update logic. That way we wait until we're sure that the character movement logic has all gone through before updating the movement based on MotionControllerData.