Pinch state becoming stuck in Mixed Reality on visionOS

Note: I noticed this post, which looks like the same problem, just before posting this, but since I’m encountering this in Mixed Reality (using PolySpatial and InputSystem) rather than Fully Immersive mode, I thought I’d post it as another datapoint. Also, the UI in the attached project (along with the log output it generates) might be helpful for debugging.

It seems the problem is limited to DirectTouch events, mostly when two hands are involved. The input states for one or both of the hands will sometimes become stuck with a TouchPhase of Stationary and a SpatialPointerPhase of Moved. This alone wouldn’t be a big problem, but the real issue is that this usually happens without an Ended state being sent, so there is no way to know when to stop the effect of any interactions.

Example videos:
Video 1
Video 2

Example images:


Replication steps:

  1. Build this project
  2. Run on device
  3. Pinch directly on the green cube with both hands

It doesn’t always occur, so several attempts may be required. The timing and order of state changes may be relevant.

Interesting, and does seem different than the issue we are talking about in the other thread
The other issue can be repro’d with just repeated pinching of a single hand, and doesnt require any overlapping of events…

Thanks for your input (no pun intended). My use case doesn’t involve repeated single hand pinching (at least not in quick succession, if that’s what you mean), so it’s still possible it’s caused by the same issue (e.g., proximity of events in time or space) and I just haven’t noticed it with one hand yet. I’ll play around some more and see if I can reproduce what you’re seeing.

I did some more testing and it seems that this occurs when one hand does a DirectPinch on an object while the other hand is doing a Touch. See this video.

It happens most of the time under those conditions, but not always, so I suspect it might only be occurring when the Touch.phase for that frame is Stationary rather than Moved, which is the state that it ends up getting stuck in.