Search code examples
unity-game-enginezooming

Unity Zoom script


I use this simple zoom script, changing the cameras Field of View instead of moving the camera (to avoid clipping) and it works great.

However I would like to add a maximum FOV to it, like FOV 80 or so. Maybe also a Minimum FOV (not as important as max FOV)?

Can I do that modifying this script?

 {
 // Start is called before the first frame update
 void Start()
 {

 }

 // Update is called once per frame
 void Update()
 {
     if (Input.GetAxis("Mouse ScrollWheel") > 0)
     {
         GetComponent<Camera>().fieldOfView--;
     }
     if (Input.GetAxis("Mouse ScrollWheel") < 0)
     {
         GetComponent<Camera>().fieldOfView++;
     }
 }

}


Solution

  • Just add the desired min and max values as members to your script. Then you can use the inspector to adjust them:

    private Camera cam;
    [SerializeField] private float minFov = 20;
    [SerializeField] private float maxFov = 80;
    
    void Awake()
    {
        cam = GetComponent<Camera>();
        // ensures that the field of view is within min and max on startup
        UpdateFov(cam.fieldOfView);
    }
    
    void Update()
    {
        float scrollInput = Input.GetAxis("Mouse ScrollWheel");
        if(scrollInput > 0)
            UpdateFov(cam.fieldOfView - 1);
        else if(scrollInput < 0)
            UpdateFov(cam.fieldOfView + 1);    
    }
    
    void UpdateFov(float newFov)
    {
        cam.fieldOfView = Mathf.Clamp(newFov, minFov, maxFov);
    }
    

    I also cached the camera, since GetComponent calls are rather expensive.