1.概要
Unity5.4から正式にリリースされた【UnityWebRequest】を使って
web上にある画像ファイルをダウンロードして
ローカルに保存してみます。
動作確認を行ったUnityのバージョンは【2019.2.13f1】になります。
2.スクリプト
using System; using System.IO; using UnityEngine.Networking; StartCoroutine(GetwebReqContents()); private IEnumerator GetwebReqContents() { Debug.Log("処理開始"); while (Application.internetReachability == NetworkReachability.NotReachable) { Debug.Log("ネットワークに接続されていない"); yield return new WaitForSeconds(5f); } Debug.Log("画像の取得開始"); UnityWebRequest webReq = UnityWebRequestTexture.GetTexture("画像のURL"); yield return webReq.SendWebRequest(); Debug.Log("画像の取得完了"); if (webReq.isNetworkError || webReq.isHttpError) { Debug.Log(webReq.error); } else { try { File.WriteAllBytes(@"保存先ファイルパス", webReq.downloadHandler.data); Debug.Log("保存完了"); } catch(Exception ex) { Debug.Log(ex.Message); } } }
3.使い方
基本的にはコルーチンを使うことになります。
【IEnumerator】インターフェースを使って【StartCoroutine】で関数を実行します。
スクリプトの説明としては
【Application.internetReachability】でインターネットのアクセス状態を調べます。
状態が【NetworkReachability.NotReachable】であれば
インターネットに接続されていない状態なので
yield return new WaitForSeconds(5f);
で5秒間処理を停止し、再開する。をアクセス可能な状態になるまで繰り返します。
アクセス可能な状態
NetworkReachability.ReachableViaCarrierDataNetwork:キャリアネットワーク
orNetworkReachability.ReachableViaLocalAreaNetwork:Wi-Fiネットワーク
になったらUnityWebRequestTexture.GetTexture
でHTTP Get経由で画像をダウンロードしに行きます。ダウンロードが完了したら指定パスに保存するといった流れになります。
4.結果
下図のとおりの流れになります。
【ネットワークに接続されていない】
の部分は故意にネットワークを切断しています。