A simple input action (on mouse click for example) to call a function to change the InputMode and lock mouse to viewport won’t lock the mouse to viewport.
FInputModeGameAndUI InputMode;
InputMode.SetLockMouseToViewport(true);
InputMode.SetHideCursorDuringCapture(false);
SetInputMode(InputMode);
However, if I call the SetInputMode continuously every Tick in the PlayerController, it works.
void APlayerController::PlayerTick(float DeltaTime)
{
Super::PlayerTick(DeltaTime);
FInputModeGameAndUI InputMode;
InputMode.SetLockMouseToViewport(true);
InputMode.SetHideCursorDuringCapture(false);
SetInputMode(InputMode);
}
Engine version 4.12.5.
Bug? Calling it once won’t lock to viewport at all unless you keep calling it in Tick.
EDIT: found the reason why. it seems bShowMouseCursor == true will cause this to not work. However, if I set it to false, the cursor will lock to viewport correctly without having to use that Tick workaround. Seems like a bug.