- Home /
Rotate Object to face 2 axis?
Say I have 2 vectors A and B that form a plane. I would like to rotate an object so that the object's Y axis will point in the direction of vector A, and the object's Z axis will point in the direction of vector B. Quaternion.FromToRotation() works for aligning to one axis. I've tried Quaternion.FromToRotation() for each axis and then multiplying them, but that does not work. I can't figure this one out. Any ideas?
Answer by janzdott · Jan 29, 2014 at 04:45 AM
Nevermind, I got it. Here's my solution. I'd still like to know if there's a better way of doing it.
void Align(Vector3 alignY, Vector3 alignZ) {
//Align Z first
transform.rotation = Quaternion.FromToRotation(Vector3.forward, alignZ);
//Get component of alignY that is in the plane YZ
alignY -= Vector3.Dot(alignY, transform.right) * transform.right;
//Get the angle needed to align Y
float angle = Vector3.Angle(transform.up, alignY);
//Fix angle sign
if (Vector3.Dot(Vector3.Cross(alignY, transform.up), transform.right) > 0.0f) {
angle *= -1.0f;
}
//For some reason this wasn't working
//transform.rotation *= Quaternion.AngleAxis(angle, transform.right);
//Align Y
transform.Rotate(transform.right, angle, Space.World);
}
Your answer
Follow this Question
Related Questions
How do we write a C# script to smoothly rotate objects based on Input.GetAxis("Mouse *")? 1 Answer
Rotate object on the Y axis 90 degrees every 5 minutes? 1 Answer
A different kind of billboarding for particles.. 3 Answers
Character always facing mouse cursor position... 3 Answers
Is it possible to keep an object upright inside another game object that is spinning or rolling 1 Answer