# Velocity base on Rotation

I was searching for how to add local velocity in a gameObject but i didnt find any answer so i created this code to the velocity base on the rotation:

``````    float xVel;
float yVel;

void Update (){

if(Input.GetKey(KeyCode.A)){

transform.Rotate (0, 0, 2);

}else if(Input.GetKey(KeyCode.D)) {

transform.Rotate (0, 0, -2);
}

if (transform.eulerAngles.z <= 10 || transform.eulerAngles.z >= 350) {

yVel = 2f;

} else {

yVel = 0f;
}

if (transform.eulerAngles.z <= 190 || transform.eulerAngles.z >= 170) {

yVel = -2f;

} else {
yVel = 0f;
}

}

void FixedUpdate(){

GetComponent<Rigidbody2D> ().velocity = new Vector3 (xVel, yVel, 0);
``````

}

the problem is that when i run the game, the yVel i s always equal to -2, doesnt matter the rotation, please help, im newbie. Thanks.

I think line 25 needs to be an And condition instead of an Or condition, as I assume you want to check if the value is between 170 and 190. So it would read:

``````if (transform.eulerAngles.z >= 170 && transform.eulerAngles.z <= 190) {
``````

The way it is currently written with the Or condition, the statement will end up being true all the time as it is checking:

• If z <= 190, so any value less than or equal to 190. ORâ€¦
• If z >= 170, so any value greater than or equal to 170.

Either one of those statements will always be true, so your yVel is always getting set to -2. Hope that makes sense.