# 3D Orbital Camera issue

I’m working on creating a 3D orbital camera for my player character (i.e. it moves on a spherical path around the model) and I understand the principal behind converting spherical coordinates to Cartesian coords, but for some reason I’m getting weird behavior in the actual movement.

GIF of camera movement

``````if (Input.GetMouseButtonDown(1))
{
MouseX = Input.mousePosition.x;
MouseY = Input.mousePosition.y;
}
if (Input.GetMouseButton(1))
{
if (Input.mousePosition.x - MouseX > 0)
{
phi += CameraMoveSpeed * Mathf.PI / 180;
}
else if (Input.mousePosition.x - MouseX < 0)
{
phi -= CameraMoveSpeed * Mathf.PI / 180;
}
if (Input.mousePosition.y - MouseY > 0)
{
theta += CameraMoveSpeed * Mathf.PI / 180;
}
else if (Input.mousePosition.y - MouseY < 0)
{
theta -= CameraMoveSpeed * Mathf.PI / 180;
}
}

Vector3 target = new Vector3(transform.position.x, transform.position.y + 10, transform.position.z - 10);

target.x = transform.position.x + CameraDistance * Mathf.Cos(phi) * Mathf.Sin(theta);
target.y = transform.position.y + CameraDistance * Mathf.Sin(phi) * Mathf.Sin(theta);
target.z = transform.position.z + CameraDistance * Mathf.Cos(theta);

mainCam.transform.position = target;
``````

I’m not sure where I’m going wrong.

Ok, I’ve figured it out!

I ended up finding a project from my computer graphics course that had the answer.

``````if (Input.GetMouseButtonDown(1))
{
MouseX = Input.mousePosition.x;
MouseY = Input.mousePosition.y;
}
if (Input.GetMouseButton(1))
{
if (Input.mousePosition.x - MouseX > CameraMouseThreshhold)
{
theta += CameraMoveSpeed;
}
else if (Input.mousePosition.x - MouseX < -CameraMouseThreshhold)
{
theta -= CameraMoveSpeed;
}
if (Input.mousePosition.y - MouseY > CameraMouseThreshhold)
{
phi += CameraMoveSpeed;
}
else if (Input.mousePosition.y - MouseY < -CameraMouseThreshhold)
{
phi -= CameraMoveSpeed;
}
}