Rotate my player gradually without "Jumping"

Hello, i have a rotate script, that works, just that it “jumps” if i just press one time it rotate like 35 degrees and if i just hold it works good, just that i dont know how to make that when pressing one time it rotates a bit, my code:

if (ClockwiseRotation==false){    
            rotZ += Time.deltaTime * RotationSpeed * -100;
        }
        else{
            rotZ += -Time.deltaTime * RotationSpeed * 100;
        }
       if (Input.GetKey(KeyCode.LeftArrow)){  
     transform.rotation = Quaternion.Euler(0,0,rotZ);} 
/* i tried by gradually increase a variable but it didnt work */

The code inside Update() { ... } is executed in every frame. With 60 frames per second it’s executed every 0.016 sec.
Obviously, you have this code in the Update(). And rotZ is getting inreased/decreased in every frame, so every 0.016 sec rotZ is in(de)creased by 0.016 * 100 * RotationSpeed.


The code inside if (Input.GetKey(...) { ... } is executed in every frame only when you hold the LeftArrow key. So, it does correctly rotate the player because in every frame rotZ is in(de)creased and right here the player is rotated to the given rotation that didn’t change too much yet.
And what happens if you don’t hold the key? The rotZ is getting in(de)creased continuously in every frame. So, to the moment when you finally decide to press the key, the transform.rotation = ... method receives rotZ value that is now pretty far from where it was last time the key was pressed, and you get a big ‘jump’ rotation.


Move the code that in(de)creases rotZ into the scope that is executed only if you hold the key pressed, so rotZ will be changed only when it’s really needed to change - when you press and hold the LeftArrow.