# Rotation math problem

I have a camera that rotates around a disk. When I create an empty gameobject at the center of the disk and child the camera to it, I can simply rotate the whole thing so that the camera keeps its x-axis rotation (tilted up).

How do I replicate the exact same behaviour without using Unitys child-parent rotation?

I already have it working that I get the correct camera position on the “unit circle” via the degrees I input, but next, I need to rotate the camera so that it always looks slightly away from the circumference. How can I fix the line marked with “PROBLEM”?

``````//center is 0,0,0

protected void RotateBy(float degrees)
{
_angle += degrees;

// Set new position
float x = Mathf.Cos(_angle * Mathf.Deg2Rad) * _altitude;
float y = Mathf.Sin(_angle * Mathf.Deg2Rad) * _altitude;
transform.position = new Vector3(x, y, transform.position.z);

}

///

void LookAtCenter()
{
Vector3 directionToCenter = Vector3.zero - transform.position;
float zRotation = Mathf.Atan2(directionToCenter.y, directionToCenter.x) * Mathf.Rad2Deg;

// Offset 90 degrees to make bottom face the center.
// PROBLEM: This only works if x and y are both 0
transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, zRotation + 90f);
}
``````

It seems like the simplest solution would be to use Quaternion multiplication. It’s what Unity (probably) uses for child-parent rotations. In your case you would do something like

`````` Quaternion tiltRotation=(Whatever you want it to be);
Quaternion circleRotation=Quaternion.Euler(0, 0, zRotation+90f);
transfrom.rotation=circleRotation*tiltRotation;
``````