how to make a gameObject rotate around another gameObject in Unity in the rotating plane

26,872

The second parameter in Transform.RotateAround() is the axis which determines the orientation of the plane on which sphereTwo rotates around sphereOne. Right now, you have this set to a static value of new Vector3(0, 1, 0), basically the world's up vector.

To have the axis instead be based on the orientation of sphereOne, use its Transform.up vector instead - this will change based on the world-space rotation of sphereOne's transform:

private void Update() 
{
    transform.RotateAround(sphereOne.transform.position, sphereOne.transform.up, 100*Time.deltaTime);
}

(You could probably alternatively use both.transform.up, depending on the situation.)

Hope this helps! Let me know if you have any questions.

Share:
26,872
ptamzz
Author by

ptamzz

Designer at Google@ptamzzgooglefacebook

Updated on November 19, 2020

Comments

  • ptamzz
    ptamzz over 3 years

    I've two gameObjects, sphereOne and sphereTwo as the children of an empty gameObject both.

    I've this C# code attached to a sphereTwo

    private void Update() =>
        transform.RotateAround(sphereOne.transform.position, 
            new Vector3(0, 1, 0), 100 * Time.deltaTime);
    

    This lets sphereTwo rotate around sphereOne.

    When I rotate the parent gameObject both, it rotates only on that specific plane.

    enter image description here

    How do I dynamically update the transform position of the rotating sphere so that it lies on the same plane as the parent Object's rotation?

  • Fattie
    Fattie almost 8 years
    that's all true but the OP needs to learn how to stack up transforms so as to achieve stuff like this!