You are using unfiltered mouse input which can often be a bit all over the place, depending on the mouse. You may want to just use GetAxisRaw to only find out the direction, and have sensitivity settings to modify the turning speed.
Rigidbody calculates and reads .velocity if the .isKinematic is false.
You should not mix MoveRotation/MovePosition with setting .velocity but reading .velocity from prior frame should be okay.
You should not mix AddTorque/AddForce and setting .velocity either.
Use Rigidbody’s .position instead of Transform’s .position if working with physics movements.
Use FixedUpdate for all your physics movements and calculations; the consistent delta time is important to avoid jitter.
Use Update for all your controller input polling or events; the input system only updates state once per Update and reading it in FixedUpdate might end up getting inconsistent results. Cache your desired movements to member variables that you can then use in subsequent FixedUpdate calls.
I did this. Everything is in the fixed update, and I’m using MovePosition. Velocity is only read if is kinematic is true. When it’s false, it’s always read as 0.
Because your rigidbody isn’t kinematic you should place your code in Update.
If you place the code in FixedUpdate then the rotation won’t be smooth because FixedUpdate typically runs at a lower frame rate than Update. If your rigidbody was kinematic then it would be okay in FixedUpdate because MoveRotation on a kinematic rigidbody is interpolated to help keep it smooth.
K, I’ll try this. I can tell it’s the rotation and not the mouse, because looking at the inspector, the rotations are not smoothly changing— they jump.