- Home /
RotateAround object in local space
Hi, thanks for any help.
I've been looking around trying to find the answer to this, but what I'm finding keeps either being out of date or doesn't seem to work.
Essentially I want a game object, A, to be in constant orbit around another game object, B, at a consistent radius and continue to do so smoothly when B rotates 90 degrees. RotateAround works in world space which would be fine if B didn't rotate, but I either need it to work in B's local space or come up with a different solution.
Any thoughts? Thanks again.
Some people find spherical (or polar) coordinates easier for making animations for things rotating around other things. http://wiki.unity3d.com/index.php/SphericalCoordinates
Answer by Vicarian · Aug 23, 2018 at 08:12 PM
My solution is pretty inelegant (I'm not great with Quaternions), but you could add a transform around the location of the rudder (just a simple point, you can use a 3D object to check its position relative to the object, then apply the following:
void Update () {
if (Input.GetKey(KeyCode.W)
transform.Rotate(Vector3.right, -0.5f); // Pitch down
else if (Input.GetKey(KeyCode.S)
transform.Rotate(Vector3.right, 0.5f); // Pitch up
else if (Input.GetKey(KeyCode.A))
transform.Rotate(m_rudder.up, -0.5f); // Yaw left
else if (Input.GetKey(KeyCode.D))
transform.Rotate(m_rudder.up, 0.5f); // Yaw right
}
m_rudder
references the transform I stuck over the rudder. I don't have a submarine model, so I just made a capsule and stuck the transform at the back. Seems to work ok for me.
Your answer
Follow this Question
Related Questions
Rotating game Object. 2 Answers
Transform.RotateAround Issues 1 Answer
transform.Rotate slows down my moving cube 0 Answers
if statements with transform.rotation not working? 2 Answers