GodotVR / godot-xr-tools

Support scenes for AR and VR in Godot
MIT License
525 stars 75 forks source link

Desktop Turn overwriting camera X-Rotation even in full XR mode #684

Closed Malcolmnixon closed 1 month ago

Malcolmnixon commented 1 month ago

The movement_desktop_turn.gd scripts physics_movement() method is resetting the player body camera X-rotation to 0 even when XR is actively being driven by a headset. https://github.com/GodotVR/godot-xr-tools/blob/7c6d455b7d6f4b05e4874cab4d53912270a3d84b/addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd#L87-L95

When not in desktop mode the desktop movement providers should do nothing.

Malcolmnixon commented 1 month ago

@pietru2004 Could you look into this? While overwriting the camera doesn't visually corrupt XR experiences, it is resetting the Node3D rotation and so gaze-pointer actions (or other functions expecting to be able to read the camera rotation) are being affected.

pietru2004 commented 1 month ago

Last time I checked it wasn't doing anything when xr was active(headset active). Gona check again...

pietru2004 commented 1 month ago

I think, If you set clear_cam_x_when_body_not_active to false there should be no problems, also I think problem that surreal6 has is related to vr headset he had connected to pc.

Malcolmnixon commented 1 month ago

Yes, real XR mode can be fixed by overriding the default 'true' value of that value to be false, but that means the user has to explicitly disable a portion of the desktop behavior to get XR mode functioning correctly.

I'm still not clear why the desktop code is doing anything when the user isn't in desktop mode.

surreal6 commented 1 month ago

Hi there, this seems to be the bug I was experimenting with the desktop function and the gaze pointer. I can confirm the problem

pietru2004 commented 1 month ago

hm... If I recall correctly the clear_cam_x_when_body_not_active was made for sitting and was meant only for desktop so the if statement should probably be altered. The clear_mouse_move_when_body_not_active is supposed to clear any mouse movement if player is not in desktop mode