Trying to Make a Smooth Camera Zoom While Changing Targets

Hey,

I cannot get my camera to smoothly switch targets while zooming in or out simultaneously. The camera always zooms a set amount. Though that distance/time is constant, my change target code distance/time is variable because it rotates the camera between an idle object and my player. When my player is a certain distance away, all goes well, but when he moves further or closer, it doesn’t look so great. Is there some sort of ratio I can use to always make my two functions run for the same exact amount of time/frames/whatever? (I.E. the camera reaches the new zoom location and the new target at the same exact time every time the function is called?).

   private void ChangeTarget(Transform tgt)
{
    changingTarget = true;
    activeTarget = tgt;
    Vector3 dir = new Vector3(0.0f, 0.0f, -dist);
    Quaternion rotation = Quaternion.Euler(currentX, currentY, 0.0f);
    float distToTarget = Vector3.Distance(activeTarget.position + rotation * dir, camTransform.position);
    Debug.Log(distToTarget);
    camTransform.position = Vector3.MoveTowards(camTransform.position, activeTarget.position + rotation * dir, 20.0f * Time.deltaTime);

    if (camTransform.position == activeTarget.position + rotation * dir)
    {
        camTransform.LookAt(activeTarget.position);
        changingTarget = false;
    }
}

//Zoom the camera in
private void ZoomIn()
{
    //activeTarget = target2;
    if (!zoomingOut)
    {
        float targetZoom;

        if (cam.orthographicSize > 8.0f)
        {
            targetZoom = 8.0f;
        }

        else
        {
            targetZoom = 4.0f;
        }

        if (cam.orthographicSize > targetZoom)
        {
            zoomingIn = true;
            cam.orthographicSize -= 20.0f * Time.deltaTime;

            if (targetZoom == 4.0f)
            {
                ChangeTarget(playerTransform);
            }

            StartCoroutine(ZoomPause(0.0f));
        }

        if (cam.orthographicSize <= targetZoom)
        {
            zoomingIn = false;
            cam.orthographicSize = targetZoom;
        }
    }
}

//Zoom the camera out
private void ZoomOut()
{
    float targetZoom;

    if (cam.orthographicSize < 8.0f)
    {
        targetZoom = 8.0f;
    }

    else
    {
        targetZoom = 12.0f;
    }

    if (!zoomingIn)
    {
        if (cam.orthographicSize < targetZoom)
        {
            zoomingOut = true;
            cam.orthographicSize += 20.0f * Time.deltaTime;

            if(targetZoom == 8.0f)
            {
                ChangeTarget(targetTransform);
            }

            StartCoroutine(ZoomPause(0.0f));
        }

        if (cam.orthographicSize >= targetZoom)
        {
            zoomingOut = false;
            cam.orthographicSize = targetZoom;
        }
    }
}

IEnumerator ZoomPause(float pauseTime)
{
    float p = pauseTime;
    yield return new WaitForSeconds(p);

    if (zoomingIn)
    {
        ZoomIn();
    }
    
    else if(zoomingOut)
    {
        ZoomOut();
    }
}

Nevermind. I figured it out with a distance ratio, which speeds up or slows down the target change based on player distance to the original camera target.