Download

Check if motion controllers are tracked not working on Windows MR?

This is the code I used for checking if the Vive controllers were powered on (or tracking):

But even when my Windows MR controllers are powered off they appear in my game world, which means that they’re being reported as tracked?

Nobody is developing for WindowsMR directly, I guess? :slight_smile:

I wonder if OpenXR has a generalized solution for this… or if it simply is Microsoft that ignores some protocol on their side.

Apparently, the tracking cameras on a WindowsMR HMD can also fail silently, and when that happens, you only get the gyro (3DOF), but no height information and in the Mixed Reality Portal, they then lock the height to how tall they think you are, but in Unreal, the HMD ends up in the floor.

Is there also no built-in way of detecting that in Unreal?

Do I really have to set a repeating timer and compare transforms manually?

EDIT: Hello… and this seems to be exclusively for WindowsMR and the HMD (exactly what my last post was about), although it doesn’t seem to differentiate between 3DOF and full tracking:

Capture.PNG

But still no solution for controllers?

Not a perfect solution, but I simply check if location and rotation (for components - relative) are exactly equal to zero.

We were missing some plumbing to the proper BP functions. This fix allows you to use IsTracked and HasValidTrackingPosition:
https://github.com/fieldsJacksonG/UnrealEngine/commit/da0aa0108eae3a75f0949cd46607b7bd96396e69

Thank you!

Does it also distinguish between camera tracking and gyro-only tracking, or do we have to implement that ourselves?

(Now that I think about it, the above question goes for both the HMD and controllers, as they both are able to lose camera tracking while still having other features active…)

If IsTrackingAvailable(), you will have at least 3-dof tracking, if HasValidTrackingPosition() you will have 6-dof

So:
if (IsTrackingAvailable() && !HasValidTrackingPosition()) // 3-dof
if (!IsTrackingAvailable()) // All tracking data is unavailable

I’ll need to take another look at the controllers - IsTracked will be true for 6-dof, we may need to add a new BP function for controller 3-dof

This seems to have changed again in 4.24, but it seems like an ok change.

I now to this every frame instead:

Now I wish the same would exist for the headset…

In 4.25 I see this is new… but what strange entries in that list, and no entry for the headset??

1.png