Fixes floating stale hands and doubled mesh with Windows XR Plugin #9890
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
After Unity fixed their head tracking bug on pause/resume, it revealed that we still had some issue with hands not being thoroughly cleaned up.
Thanks to @Holo-Fiedel's research at #9238 (comment), and verifying the logs locally, this was fixable by guarding against an incorrect hand pose throwing an exception in the hand mesh provider.
The underlying issue appears to be if Windows XR Plugin reports an InputDevice that represents a SpatialInteractionSource that happens to be lost between the time Windows XR Plugin reported its devices and the time MRTK asks the platform for a hand mesh. This should only really happen within the span of a single frame, so the next frame will properly report the InputDevice as lost.
This exception was causing the rest of the
Update
loop to stop running, which put MRTK's local InputDevice tracking out of sync and caused the MRTK source to never be reported as lost.After this change, I've been unable to repro any of the hand joint / hand mesh related issues.
Changes