Hi, I have a basic movement script (The game is a 2D platform style game). The character is continuously swimming forwards, to control it you rotate it up and down to move up and down. The problem I am having is, when it rotates, it stops the transform.velocity until it stops rotating, How could I do this more smoothly? I have tried both transform.Rotate(0,0,2) and transform.Rotate(Vector3.forward * 2,Space.Self) My code is Code (csharp): public static var spinSpeed : float = 1.5; //speed which the object will spin public static var forwardVelocityValue : float = 4; //speed the object will move forward var heroObject : GameObject; //the object this script applies to var maximumUpRotation : float = 80;//The maximum rotation for the Up button to work var minimumUpRotation : float = 275;//The minimum rotation for the Up button to work var maximumDownRotation : float = 280;//The maximum rotation for the Down button to work var minimumDownRotation : float = 85;//The minimum rotation for the Down button to work var upButtonX = Screen.width/4 * 3; var Alive : boolean = true; var getHealth : PlayerHealth; function Start() { getHealth = GameObject.Find("Player").GetComponent(PlayerHealth); } function OnGUI () { if (GUI.RepeatButton (Rect (Screen.width/8*6.5,Screen.height/8*6,Screen.width/100*15,Screen.height/100*20), "Up")) //spin up button { if (Alive == true) { if (transform.localEulerAngles.z < maximumUpRotation) //if rotation is 80 or less then do { heroObject.transform.Rotate(Vector3.forward * spinSpeed,Space.Self);//Object to spin.Startspinning.angle.z } if (transform.localEulerAngles.z > minimumUpRotation) //if rotation is 255 or more then do { heroObject.transform.Rotate(0,0,spinSpeed);//Object to spin.Startspinning.angle.z } } } if (GUI.RepeatButton (Rect (Screen.width/8*.5,Screen.height/8*6,Screen.width/100*15,Screen.height/100*20), "Down"))//spin down button { if (Alive == true) { if (transform.localEulerAngles.z < minimumDownRotation) //if rotation is 85 or less then do { heroObject.transform.Rotate(0,0,-spinSpeed);//Object to spin.Startspinning.angle.-z } if (transform.localEulerAngles.z > maximumDownRotation) //if rotation is 250 or more then do { heroObject.transform.Rotate(0,0,-spinSpeed);//Object to spin.Startspinning.angle.-z } } } } function FixedUpdate() { if (getHealth.health == 0) { Alive = false; } if (Alive == true) { rigidbody2D.velocity = transform.right * forwardVelocityValue;//object to move.velocity = speed (x,y) } if (Alive == false) { rigidbody2D.velocity = transform.up * 2;//object to move.velocity = speed (x,y) } }