Thanks for the follow-up on this Opplo.
I manged to get around this by modifying something in one of the local player scripts. I can’t remember what exactly I changed but it solved the problem for me. I just had to make sure that the fixed duplicate was in the starter player folder.
I can confirm this is still happening as of May 2021.
There is a workaround, but it’s still an undesired bug as I wasn’t sure if it was my code or another problem with Roblox.
The culprit is line 1384 in the camera script PlayerModule.CameraModule.BaseCamera as shown below. By commenting it out, I no longer have the issue. It does appear for me like it’s reverting it every frame which would render UserInputService.MouseBehavior useless unless if you use a RunService loop as pointed out by @opplo.
Can confirm that this bug has been unresolved to this day - developers still have to resort to using workarounds that don’t always work right out of the box:
In the first clip, rotation was successful using UserInputService:GetMouseDelta() and having the MouseBehavior changed to Enum.MouseBehavior.LockCurrentPosition (Also tested LockCenter with the same results). Note that the line of code used to change the behavior property was within a RenderStepped loop.
In the second clip below , the code used was the exact same - only the line of code changing MouseBehavior was one line before the RenderStepped loop was created. (Therefore being set only once. To provide context: The RenderStepped loop ends when the user stops holding their Left Mouse button. Setting the Mouse behavior only happens once in my moudule script with no other code that could ever possibly conflict with it.) As you can see, the property is never actually set or is instantly overridden by an internal script or the Roblox engine.