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. :slight_smile: