UnityWebRequest
でファイルを保存するには request.downloadHandler = new DownloadHandlerFile(savePath);
を指定する
ロードする前にファイルのチェック処理を書かないと再度ロードされてしまうので、ちゃんとチェック処理を書きましょう
using System.Collections; using UnityEngine; using UnityEngine.Networking; using System.IO; public class SampleMonoBehaviour : MonoBehaviour { [SerializeField] private SpriteRenderer _sprite; private const string URI = "https://1.bp.blogspot.com/-tWP38QNcn04/X1CK4cXnvjI/AAAAAAABavY/W2xyveWsZCggkTecEC_tEjaBBhCTUmXkQCNcBGAsYHQ/s400/daidougei_cigar_box_woman.png"; private IEnumerator Start() { var saveRoot = Path.Combine(Application.temporaryCachePath, "Cache"); var savePath = Path.Combine(saveRoot, "test.png"); yield return LoadAndSaveTexture(URI, savePath); _sprite.sprite = GetTexture(savePath); } /// <summary> /// キャッシュからテクスチャをロード /// </summary> private Sprite GetTexture(string savePath) { // ファイルがなければ null if (!File.Exists(savePath)) return null; // 保存してあるテクスチャのロード var texture = new Texture2D(0, 0); texture.LoadImage(File.ReadAllBytes(savePath)); // Sprite に変換 return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero); } /// <summary> /// ファイルをロード /// ファイルがあればロードしない /// </summary> private IEnumerator LoadAndSaveTexture(string uri, string savePath) { // ファイルがあるので終了 if (Directory.Exists(savePath)) yield break; var dir = Path.GetDirectoryName(savePath); // ディレクトリがなければ作成する if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); using (var request = UnityWebRequestTexture.GetTexture(uri)) { request.disposeUploadHandlerOnDispose = false; // ファイルを保存 request.downloadHandler = new DownloadHandlerFile(savePath); yield return request.SendWebRequest(); if (request.isHttpError || request.isNetworkError) Debug.LogError(request.error); } } }