If you're using multiple cinemachine camera. You should update the distance from target object to virtual camera
I use "cut" effect to change between virtual cameras
enter image description here
public class MyController:MonoBehaviour
{
private float distanceToCamera;
private CinemachineBrain cameraBrain;
private void Start()
{
cameraBrain = Camera.main.GetComponent<CinemachineBrain>();
cameraBrain.m_CameraCutEvent.AddListener((brain) =>
{
if (brain != null)
{
if (brain.ActiveVirtualCamera != null)
{
// if virtual camera changed
distanceToCamera = Vector3.Distance(transform.position, brain.ActiveVirtualCamera.VirtualCameraGameObject.transform.position);
Debug.Log($"on cut event {brain.ActiveVirtualCamera.Name} {distanceToCamera}");
}
}
});
// init distance
distanceToCamera = Vector3.Distance(transform.position, Camera.main.transform.position);
}
private void Update()
{
if (Input.GetMouseButton(0))
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distanceToCamera));
Debug.Log($"mousePosition {mousePosition}");
}
}
}