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.

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.