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.
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.