Common mistakes:
- forgetting
Time.deltaTime;
- diagonal movement being faster;
- mixing direct Transform movement with dynamic Rigidbody physics;
- applying forces in
Update instead of FixedUpdate;
- reading one-frame input only in
FixedUpdate;
- applying gravity twice;
- forgetting Rigidbody rotation constraints.
Clamp or normalize diagonal input:
direction =
Vector3.ClampMagnitude(
direction,
1f
);