Here, I have a plane model with some sub parts(like aileron) can rotate:
That red section is weight painted(rigged) vertices, and I need to control the rotation of this in Unity by script.
So this is the image in Unity, rotating through green ring(along x axis) of aileron bone from gizmo works exactly I want.
However as you can see in the inspector, I rotated along X axis but it doesn't changed only x axis, it also changed other axis like Y and Z.
So when I just rotate X rotation of aileron from the script or inspector, it gives me total wrong rotation, and here is the solution I got: How to rotate object just like in the scene?
So I wrote the code:
leftAileron.Rotate(0, value, 0);
Now it rotates desired angle but the problem is transform.Rotate method is just rotating the object, means adding the new value to current rotation.
In my case, I need to "set" the rotation, not adding it, because it gives wrong rotation in this case.
I made a slider for explain and demonstrate my problem: here is the slide and it's range is -5 to 5 and default is 0.
The code for rotating aileron is this:
sliderLeftAileron.onValueChanged.AddListener((value) => {
leftAileron.Rotate(0, value, 0);
});
When I moved slide to left, value goes negative so it rotates like this.
But when I slightly moved the slide to right, it still rotate same direction because the value is still negative and just try to adding it.
So I need to set the rotation of aileron, not adding it, moving slide to right should moves opposite direction and vise versa.
Is there a way to set rotation just like Rotate(0, value, 0) but not adding it in this case, like this:
transform.rotation = Quaternion.Euler(0, value, 0);
I tried bunch of ways but none of them worked, how do I treat my aileron rotation just like in gizmo in the scene?