Cannot rotate over 360 degrees
Hi there,
this is my first time posting here, so I'm not quite sure, if I'm within all the rules of posting, but I sure hope so.
I got into some trouble rotating an object with my mouse. While everything works fine - from receiving input values to sending them to the correct object (which has a script attached that processes those values) - I still got some trouble with the actual rotation.
More detailed: the rotation applies for the different axes (x and y), but while the rotation over the y-axis works as expected, the rotation over the x-axis seems to clamp to the values 90 and 270 (depending on the direction I want to rotate in).
I searched quite a lot for some answers and what I think is related to my problem is this: transformrotate-in-x-axis.
I still got no clue though.
Here's my code so far:
// The rotation vector that shall be applied
private Vector3 rotation;
// Rotates the object according to the given value (uses the x-value to rotate over the y-axis)
void RotateInvestigatableX(float value){
if (isInteracting) return;
rotation.y = value;
}
// Rotates the object according to the given value (uses the y-value to rotate over the x-axis)
void RotateInvestigatableY(float value){
if (isInteracting) return;
rotation.x = value;
}
Now, this is only for setting the rotation vector, according to the mouse input values. The actual rotation part is this:
// Update is called once per frame
void Update(){
// Rotate the element
transform.localRotation = Quaternion.Euler (transform.localRotation.eulerAngles + rotation);
}
I also tried using transform.Rotate among a few other things, but those did not work either. Actually the current code is the closest I got to the desired result.
May I ask you guys for some help here? I'd really appreciate it.
Cheers.
Answer by mcuenez · Jan 25, 2016 at 02:06 PM
So, I finally found some time to have a closer look into this problem. After some more researching I found the solution here: Quaternions and Euler Rotations in Unity.
I don't know how I managed to overlook that... anyways, in case someone has the same problem, what I did to solve it was:
I created a new Vector stored the values in there and set the rotation using that vector. That's it. The new code looks like this:
// The rotation vector
private Vector3 targetRotation;
// Rotates the object according to the given value (uses the x-value to rotate over the y-axis)
void RotateInvestigatableX(float value){
if (isInteracting) return;
targetRotation.y += value;
}
// Rotates the object according to the given value (uses the y-value to rotate over the x-axis)
void RotateInvestigatableY(float value){
if (isInteracting) return;
targetRotation.x += value;
}
// Rotate the element
transform.localRotation = Quaternion.Euler (targetRotation);
Works like a charm.