- Home /
Finding the Euler Direction of Quaternion Rotations...
In a game involving aircraft, I have a Player GameObject with a child Aircraft GameObject. The Player object is rotated via Quaternion.FromToRotation towards a target direction. What I would like is the Aircraft child object to rotate so that "Up" vector of it's Transform is along the path of the Player's rotation (the effect would be the "aircraft" would bank in the direction of the overall rotation)
My issue is finding the relationship between the local space direction of rotation and the aircraft's local Euler angles. I've tried finding the Quaternion.eulerAngles of the new direction, adding that to the transform.position, and then finding the Transform,InverseTransformDirection of the target point. From that, I should be able to use the Mathf.Atan2 of the x and y components of the result to get an angle of rotation.
Quaternion presentDirection = player.transform.rotation;
Quaternion desiredDirection = FacingNeeded() // This function gives me the rotation needed for the player object.
Quaternion newRotation = Quaternion.FromToRotation(presentDirection, desiredDirection, maxTurnSpeed*Time.deltaTime);
Vector3 turnPathVector = desiredDirection.eulerAngles;
Vector3 relationshipVector = player.transform.InverseTransformDirection(player.transform.position + turnPathVector*100.0f);
relationshipVector = relationshipVector.normalized;
float spinAngle = Mathf.Atan2(relationshipVector.y, relationshipVector.x) * Mathf.Rad2Deg;
player.transform.rotation = newRotation;
aircraft.transform.localEulerAngles = new Vector3(0,0,spinAngle);
Unfortunately, this doesn't seem to give me the result I want. In fact, I'm pretty sure I'm doing this the hard way. If I have a Quaternion rotation from QuatA to QuatB, How would I find the rotation around local z-axis of my child object that would make its "up" vector point along the path of that rotation?
Ok I read that a couple times (lol) but if my brain is wrapping around it, wouldn't it be supremely easy just to raycast out from your player object the distance, then on your aircraft child object have it lookat() that hit.point you created from the 3d camera/player object?
$$anonymous$$aybe I didn't make the question clear enough. Let's say I want the player object to rotate around the y-axis. I would want the aircraft object to have it's "up" vector point along the x-axis, because the path of rotation around the y-axis sweeps along the x-axis. I need to know how to deter$$anonymous$$e, from the aircraft's point of view, what direction to bank so that the "up" vector sweeps along the path of rotation.
Your answer
Follow this Question
Related Questions
My Obstacle Rotations Are Not Correct 0 Answers
Code to rotate around a local axis until local Y is 0? 0 Answers
Rotation problem while dynamically changing animations 2 Answers
Quaternion distorts my object 1 Answer
Rotating a model with increments 1 Answer