- Home /
Is there a way to get rotation data for single axes?
I'm struggling to find a way to store rotation data, and need them to be stored individually and changed individually. something like
transform.rotation.y
would be useful.
Answer by robertbu · May 07, 2013 at 10:24 PM
Transform.rotation is a Quaternion...a 4D construct that is not intuitive to use. The reference warns against modifying or using the individual components. You can use transform.eulerAngles, but the values you read will not necessarily be the ones you expect. For example if you set the rotation to (180,0,0), and immediately read it back, you might get (0,180,180). There are multiple eulerAngle representations for any one 'physical' representation.
One solution is to maintain your own Vector3 and treat eulerAngles as write-only. If you need a rotation value, you read it from your own Vector3. When you want to change them, change the Vector3 and then assign it to transform.eulerAngles.
Answer by Owen-Reynolds · May 08, 2013 at 02:02 AM
The problem is, nothing to do with Unity, thinking in terms of x/y/z rotation just doesn't work. There are always two ways to spin to the same direction which give contradictory x/y/z's for it. If x/y/z rotations did work properly, we wouldn't bother with quaternions.
If you have a physical system, with strict limits, storing your own rotations as floats does work (Vector3 as robertu suggests, or just floats.) For example, a tank turret with a motor for turning and another for elevation, which correspond to y/x rotation.
For applying your own floats, rotation = Quaternion.Euler(xRot, yRot, zRot)
works. It applies y, then x as local, then z as local. y/x/z is the most obvious order, and usually what you want, like the tank turret. If you need some other order, can use: Quaternion.Euler(xRot,0,0) * Quaternion.Euler(0,yRot,0);
Your answer
Follow this Question
Related Questions
how to ignore transform.position.y 3 Answers
Problems caused by non-unique Euler angle solutions 1 Answer
how can i get Y rotation of Transform in degree ?? 1 Answer
Rotate on one axis and check if angle is inside desired range 2 Answers
Why do grouped Terrain objects move together but don't rotate as one? 1 Answer