title: Downloading large file in Unity3d using WebClient
body: <p>I am looking for any ideas regarding downloading large (100mg+) files in Unity3d using WebClient.  WWW runs asynchronously and would be perfect except it returns a memory error and crashes the app, so I have moved to the solution as outlined here:</p>
  
  <p><a href="https://stackoverflow.com/questions/24428062/how-to-download-a-file-from-url-and-save-in-location-using-unity3d-in-c-sharp">how to download a file from url and save in location using unity3d in C sharp?</a></p>
  
  <p>This works like a dream <em>except</em> it shuts down all the scripts in my app until the download is complete.  I cannot seem to even run a loading bar at the same time as the download is going on.  I have tried handling this by adding a coroutine to handle the download, but so far, no luck.</p>
  
  <p>Any help would be appreciated.  My code currently (after many iterations) looks like:</p>
  
  <p>C#</p>
  
  <pre><code> void Update()
      {
      //Sets up the timer so I can use it to watch the debugging
          timer += Time.deltaTime;
          Debug.Log (timer);
  
  //Checks to see if the file was already downloaded and saved.  If not, it begins downloading.
      if (FileExists == 0 &amp;&amp; timer &gt;= 5) {
          StartCoroutine ("DOWNLOAD");
  
      } 
  //If the file already exists, it jumps straight to the next scene.
      else if (FileExists == 1) {
          Application.LoadLevelAsync ("Different_Level");
      }
  
      //These are the buttons.  One should stop the download if the player decides they don't want to wait.
      if (Input.GetMouseButtonUp (0)) {
  
          RaycastHit rc_hit;
          Ray hud_ray = Camera.main.ScreenPointToRay (Input.mousePosition);
  
      if (Physics.Raycast (hud_ray, out rc_hit, Mathf.Infinity, 1 &lt;&lt; LayerMask.NameToLayer ("HUD"))) {
  
      if (rc_hit.transform.gameObject == b_BackButton) {
  
          StopCoroutine ("EN_Loop");
          Application.LoadLevelAsync ("Other_Level"); 
                              }
                      }
              }
  
  }
  
  //This is what should happen when the video is done downloading
  void AllDone ()
  
  {
      Debug.Log ("Download Complete");
      Application.LoadLevelAsync ("Next_Level");
  }
  
  ////This is the coroutine I created int he hopes that I could get the download to run in the background.
  IEnumerator DOWNLOAD()
  {
      Debug.Log("downloading_EN");
      WebClient client = new WebClient();
      client.DownloadFile ("http://ServerInfo.net/moviefile.mp4", Application.persistentDataPath + "/" + "moviefile.mp4");
      yield return null;
  
      AllDone ();
  
  }
  </code></pre>