title: Unity 2D - zoom in =ok, zoom out = borked
body: <p>I hope someone can help. Im trying to create a little script that zooms in to my player and back out - toggling.
  The zoom in works fine, but when I try to zoom back out it doesn't work, it gets stuck. I've created a bool to ensure it only runs the code when it needs to and I'm wondering if that is what's causing the error.</p>
  
  <pre><code>using UnityEngine;
  using System.Collections;
  
  public class CameraZoom : MonoBehaviour
  {
  
  public float zoom = 10f;
  public float normal = 3.471398f;
  public float smooth = 5f;
  private bool isZoomed = false;
  
  public Camera cam;
  public GameObject player;
  
  // lock the camera settings
  public float LockedX = 0f;
  public float LockedY = 0f;
  public float LockedZ = 0f;
  private bool hasBeenZoomed =  false;
  
  Vector3 targetPos;
  
  private Transform playerTransform;
  
  // Use this for initialization
  void Start()
  {
      targetPos = transform.position;
      playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
  }
  
  // Update is called once per frame
  void Update()
  {
      if (Input.GetKeyDown("z")) { isZoomed = !isZoomed; }
      if (isZoomed == true)
      {
          ZoomInToPlayer();
          hasBeenZoomed = true;
      }
      else
      {
          if (hasBeenZoomed)
          {
              ZoomOutFromPlayer();
              hasBeenZoomed = false;
          }
      }
  }
  
  void ZoomInToPlayer()
  {
      // By default the target x and y coordinates of the camera are it's current x and y coordinates.
      float targetX = transform.position.x;
      float targetY = transform.position.y;
  
      // ... the target x coordinate should be a Lerp between the camera's current x position and the player's current x position.
      targetX = Mathf.Lerp(transform.position.x, playerTransform.position.x, smooth * Time.deltaTime);
      //Debug.Log("player x is " + playerTransform.position.x + " and TargetX is " + targetX);
  
      // ... the target y coordinate should be a Lerp between the camera's current y position and the player's current y position.
      targetY = Mathf.Lerp(transform.position.y, playerTransform.position.y, smooth * Time.deltaTime);
      //Debug.Log("player y is " + playerTransform.position.y+ " and TargetY is " + targetY);
  
  
      // Set the camera's position to the target position with the same z component.
      cam.transform.position = new Vector3(targetX, targetY, transform.position.z);
  
      // Change the size of the camera viewport
      cam.orthographicSize = Mathf.Lerp(cam.orthographicSize, zoom, Time.deltaTime * smooth);
  }
  
  void ZoomOutFromPlayer()
  {
      // By default the target x and y coordinates of the camera are it's current x and y coordinates.
      float targetX;
      float targetY;
  
      // Change the size of the camera viewport
      cam.orthographicSize = Mathf.Lerp(cam.orthographicSize, normal, Time.deltaTime * smooth);
  
      // ... the target x coordinate should be a Lerp between the camera's current x position and the original x position.
      targetX = Mathf.Lerp(transform.position.x, LockedX, smooth * Time.deltaTime);
      // ... the target y coordinate should be a Lerp between the camera's current y position and the original y position.
      targetY = Mathf.Lerp(transform.position.y, LockedY, smooth * Time.deltaTime);
      // Set the camera's position to the target position with the same z component.
      cam.transform.position = new Vector3(targetX, targetY, transform.position.z);
  
  }
  }
  </code></pre>