Seem to have come across a bug with how rigidbody.drag is applied. I was attempting to set a top speed and acceleration for an object and then calculate a drag value that would satisfy the top speed. Assuming rigidbody.drag is a Stokes drag (didn't seem to be quadratic) I'd have thought this would work: Code (CSharp): rigidbody.drag = (acceleration / topSpeed); rigidbody.AddForce(Vector3.right * acceleration); Which should work assuming velocity += (forces - drag * velocity) * dt But it doesn't, it's close but not quite. I tried the same manually (not using a rigidbody) and of course it works fine. Then I thought, what if unity is applying the drag after applying forces, that might explain the close-but-not-quite error I'm seeing from the drag value I'm using. To test this I set up the following: Code (CSharp): // Manual var topSpeed = 10f; var acceleration= 10f; var drag = (acceleration / topSpeed); velocity += Vector3.right * acceleration * Time.fixedDeltaTime; velocity -= drag * velocity * Time.fixedDeltaTime; // Velocity here is wrong? //PhysX var topSpeed = 10f; var acceleration= 10f; rigidbody.drag = (acceleration / topSpeed); rigidbody.AddForce(Vector3.right * acceleration); Both of these are identical step for step, and I'm fairly sure they're both incorrect too which would mean PhysX in Unity has a bug with how it applies drag. Feel free to correct me if I'm wrong though.