croquet / microverse

Croquet Microverse (Beta)
Other
181 stars 53 forks source link

Left-Drag MouseLook feels backwards. (unlike all FPSs) #16

Open kenlane33 opened 2 years ago

kenlane33 commented 2 years ago
yoshikiohshima commented 2 years ago

Thanks for a comment. The architecture allows to plug in a different interaction so it is a matter of writing one, and people should be able to use a different style depending on the type of the world.

MarkusGaelli commented 2 years ago

But why using a default contrary to the expectations of users, me included?

codefrau commented 2 years ago

But why using a default contrary to the expectations of users, me included?

Because what we have is not FPS-style "mouse look" which typically does not require holding a mouse button, but rather mobile-style "drag the world" – try it on your phone and you might find that it does feel quite natural.

I agree that proper mouse look is what some people expect so it absolutely should be available, but it's far from being the only obvious choice of mapping pointer motion to world navigation.

yoshikiohshima commented 2 years ago

Yeah, maybe that we can make the default go the opposite from what we provide. In the above I wrote that I mentioned that "depending on the type of the world" but it can even be per avatar setting in the same world.

codefrau commented 2 years ago

IMHO just flipping the direction is not enough.

With actual mouse look, you can navigate 360 degrees: it's a specialized two-handed navigation mode where one hand controls movement (forwards/backwards/sideways using WASD or arrow keys) and the other hand moves the mouse to control the direction. That requires pointer-capture, the mouse pointer is hidden, so your avatar movement is not limited by the movement of the pointer on the screen.

That is a different mode from when we use our on-screen joystick, which controls both forward/backward and direction change. Using the joystick is mutually exclusive with changing the view angle using mouse-drag, you cannot perform both at the same time, since you only have one mouse pointer.

I'm not sure if the two can coexist or if that would have to be a per-device setting. Alternatively we could do something similar to multiblaster: pressing WASD would get you into mouse look mode, capture the pointer, and hide the joystick and other UI elements, until you press ESC which would get out of that mode and show those elements again.

IMHO the actual current UX issue is that we implemented WASD navigation without mouse-look, and people are mistaking drag-the-world for that.

yoshikiohshima commented 2 years ago

The behavior at least now different from the time this issue was discussed last time. Let us know how it feels now (on different devices).

kenlane33 commented 2 years ago

Different behaviors for mobile & desktop make sense. Finger drag for turn on mobile is quite nice. Standard FPS for desktop/mouse is quite nice. The tricky bit is that some users may use a laptop trackpad and most solutions give up on detecting that nuance. Perhaps an options to adjust the behavior into localStorage universally might help?

One note on "mouse/cursor lock": Once the mouse is down for a desktop, mouse style FPS, it is desirable & common for the cursor to "lock" and disappear as the user continues to turn. Otherwise a 180 degree turn is impossible without repeated mouse up/down/drag cycles. Example of lock: https://threejs.org/examples/?q=pointer#misc_controls_pointerlock I would propose (unlike this demo) something more akin to Roblox where the mouse must be continuously down for FPS mouse look to function (like is currently working).

It is still, however desirable to have the cursor "lock" while the mouse is down so FPS desktop can be used continuously without a mouse down/up/drag/down cycle throughout.

Tricky bits / trade offs: Prevents a drag & drop action in the UI. Also, a bit of care needs to be taken to avoid absorbing all down, then up, click events. This means perhaps that a minimum drag distance would need to be detected before hiding & locking the cursor. On mouse up, the cursor could come back where it had been on initial down, perhaps? Or the center. There is quite a bit of logic & option in FPS controls!