Right now, Roblox offers Default
, LockCenter
and LockCurrentPosition
mouse modes via UserInputService.MouseBehavior
. The latter two are useful when implementing actions where large mouse motions may be required, which would otherwise collide with the edge of the window.
Unfortunately, they also discard the motion of the mouse cursor in the process, locking the cursor to a single position. This desynchronises the position of the mouse cursor and the position of the physical mouse on the desk, meaning the user may have to pick up and readjust their mouse after having travelled enough distance.
Consider this common interaction of chaining together multiple mouse drags to orbit a camera around an object. The travel between motions causes the cursor to fall off the window:
Now consider the equivalent interaction in Blender, which does not lock the cursor:
This should show that locking the mouse is not a complete solution to allow for unbounded mouse movement.
I propose that Roblox introduce a Wrap
mouse mode which, instead of locking the mouse cursor to one position, merely keeps the mouse within the confines of the viewport by wrapping around at the edges.
Blender implements this to great effect:
This allows for unbounded mouse movement while keeping the mouse cursor position in sync with the user’s physical mouse position on the desk. This means the user does not have to adjust their mouse after every interaction.