I’ve got a pretty simple setup where I use transform.Rotate around to get a collection of objects to orbit a central point and it works well. I’m dividing the angle by an orbitalPeriod value to control the speed but I’ve noticed that after a certain point, that speed seems to hit a lower limit and can’t slow down any faster. I’m assuming this is related to float precision?

Example code:

ObjA

float orbitalPeriod = 465.5f;

transform.RotateAround(Vector3.zero, Vector3.up, (2 * Mathf.PI / orbitalPeriod) + Time.deltaTime);

ObjB

float orbitalPeriod = 4331;

transform.RotateAround(Vector3.zero, Vector3.up, ((2 * Mathf.PI) / orbitalPeriod) + Time.deltaTime);

ObjC

float orbitalPeriod = 10747;

transform.RotateAround(Vector3.zero, Vector3.up, (2 * Mathf.PI / orbitalPeriod) + Time.deltaTime);

Result: ObjA orbits faster around the origin, but ObjB and C move at the same speed, even though C’s rotation is be divided by a larger amount.

My first thought for a work around would be to just use Mathf on transform.position instead, but rotateAround is such a simple and easy to control solution.

Ideas?