- Home /
spinning cube 90 degrees along different axis
I have a game where i am spinning cubes. They spin in place in orthographic mode with one face facing the user. I am using the following code to spin them 90 degrees at a time. This is actually partly code I found in the questions and may help many who had sort of the same goal as i did.
public class CubeTurner : MonoBehaviour {
public float speed = 500.0f;
private float rotation = 0.0f;
private float rotation2 = 0.0f;
private float rotation3= 0.0f;
private Quaternion qTo = Quaternion.identity;
void Update () {
if (Input.GetKeyDown (KeyCode.UpArrow)) {
rotation3 += 90.0f;
qTo = Quaternion.Euler (rotation3, rotation2, rotation);
if(rotation3 == 360 || rotation2 == -360)
rotation3 = 0;
if (Input.GetKeyDown (KeyCode.DownArrow)) {
rotation3 -= 90.0f;
qTo = Quaternion.Euler (rotation3, rotation2, rotation);
if(rotation3 == 360 || rotation2 == -360)
rotation3 = 0;
}
if (Input.GetKeyDown (KeyCode.LeftArrow)) {
rotation3 += 90.0f;
qTo = Quaternion.Euler (rotation3, rotation2, rotation);
if(rotation3 == 360 || rotation2 == -360)
rotation3 = 0;
if (Input.GetKeyDown (KeyCode.RightArrow)) {
rotation3 -= 90.0f;
qTo = Quaternion.Euler (rotation3, rotation2, rotation);
if(rotation3 == 360 || rotation2 == -360)
rotation3 = 0;
}
if (Input.GetKeyDown (KeyCode.A)) {
rotation3 += 90.0f;
qTo = Quaternion.Euler (rotation3, rotation2, rotation);
if(rotation3 == 360 || rotation2 == -360)
rotation3 = 0;
if (Input.GetKeyDown (KeyCode.S)) {
rotation3 -= 90.0f;
qTo = Quaternion.Euler (rotation3, rotation2, rotation);
if(rotation3 == 360 || rotation2 == -360)
rotation3 = 0;
}
transform.rotation = Quaternion.RotateTowards (transform.rotation, qTo, speed * Time.deltaTime);
}
My question is this. This code works to spin the cube in this manner: changing the different rotation variables you use for each key causes the cube to spin around each axis. The problem is that when it spins left to right horizontally (the axis is up and down) it always spins this way no matter what orientation or how many directions its been turned in. In other words it seems to be relative to world space.This is what i want. the problem is that the other two axis spins seem to be relative to the cube. so say at the start of running the app i can hit up or down and the cube rolls the face facing the user to the top or bottom. But if you start the app and turn it horizontally to the left or right one turn and then hit up or down it does not take the front face and roll it up or down to the top or bottom. rather the axis has been rotated 90 degrees and so it takes the face that would be on one of the sides and puts it on the top or bottom. To the user it takes the face facing you and spins it in place ( or if you had an upward arrow on it it is now facing right or left.)The weird thing is that the code for all 3 keys and axis is the same but its treating 2 different than the third and i want the third. Now i have written a rather lengthy algorithm to basically spin it using each possible orientation but i want to figure out why this is happening both for understanding and to make the code more efficient and cleaner. thanks if you can help
note: if something seems off about the code its because i have modified it since it was like this and had to revert it back to this so i just ignore weird indentions and other oddities.