How to rotate a camera from one position to another around a center point but only in a horizontal plane?

I have a model in the scene and I want to specify some different camera positions to view this model from in the scene and then make the camera lerp from it’s current position to one of these predefined position by the clicking on buttons in the UI.

I’ve tried using Vector3.Slerp with the example code in the manual but the problem with this method is that the camera sometimes takes a shortcut over the model along a vertical plane, rather then rotating around it along the horizontal plane.

I also tried this code, but it essentially gives the same behavior as Slerp.

private void LerpCamera()
    {
        currentLerpTime += Time.deltaTime;
        if (currentLerpTime > lerpTime)
        {
            currentLerpTime = lerpTime;
            lerpCamera = false;
        }

        float t = currentLerpTime / lerpTime;
        t = t * t * (3f - 2f * t);
        
        curDist = Vector3.Distance(cam.transform.position, target);
        cam.transform.position = Vector3.Lerp(begPos, endPos, t);
        cam.transform.LookAt(target, Vector3.up);
        
        cam.transform.position = target - (cam.transform.rotation * Vector3.forward * curDist);
    }

So any idea of how to achieve the wanted behavior?

Hello there.

A good way to move camera while rotating arrou d a point, is not to have the camera a s a child of an empty object. If the camera is not at the center of this empty object, but looking there, you can rotate this empty object and the camera will rotate arrou d the center looking at it…