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.
Answer by ricke44654 · Jun 01, 2016 at 03:07 AM
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. :)
Your answer
Follow this Question
Related Questions
trying to get local forward and side to side values 0 Answers
How to lock X rotation on 3D object? 0 Answers
How to make platform to rotate player ? 0 Answers
2D TopDown rotating a gun according to its parent position, ON MOBILE, not PC, 0 Answers
transform.parent.localRotation not working (Object reference not set to an instane of an object) 0 Answers