-2

Problem

The zoom I have is not smooth, I want to implement smooth scrolling.

Code

private void Zoom(float zoomDiff)
{
  if (zoomDiff != 0)
  {
    mouseWorldPosStart = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize - zoomDiff * zoomScale, zoomMin, zoomMax);
    Vector3 mouseWorldPosDiff = mouseWorldPosStart - Camera.main.ScreenToWorldPoint(Input.mousePosition);
    transform.position += mouseWorldPosDiff;
  }
}

void Update()
{
    Zoom(Input.GetAxis("Mouse ScrollWheel"));
}

Question

What code can I write to have the zoom scroll smoothly?

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459

1 Answers1

0

Well instead of hard applying the values interpolate towards them:

// The bigger this value the faster the interpolation
[SerializeField] private float interpolationFactor = 5f;

private float zoom;

private void Start()
{
    zoom = Camera.main.orthographicSize;
}

private void ZoomSmooth()
{
    var mouseWorldPosStart = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    Camera.main.orthographicSize = Mathf.Lerp(Camera.main.orthographicSize, zoom, interpolationFactor * Time.DeltaTime);
    var mouseWorldPosDiff = mouseWorldPosStart - Camera.main.ScreenToWorldPoint(Input.mousePosition);
    transform.position += mouseWorldPosDiff;
}


void Update()
{
    zoom = Mathf.Clamp(zoom - Input.GetAxis("Mouse ScrollWheel") * zoomScale, zoomMin, zoomMax);

    ZoomSmooth();
}
derHugo
  • 83,094
  • 9
  • 75
  • 115