UnityWebRequestTexture を使って画像をインターネットから取得し Texture2D 化する
どうしても他のことをやっているとブログを書いている時間が取れず、そのまま忘れていく流れになりがちです・・・
休みの日に時間が取れたので過去のメモを記事にしておこうと思います。
少し前にどころか、数か月前に Unity で画像を取得する方法を調べました。
UnityWebRequestTexture というキーワードを知ったのでメモがてらサンプルコードを残していきます。
UnityWebRequestTexture を使うと簡単に画像のダウンロードから Texture2D を作るところまでできます。
リファレンス
やりたかったことがそのまま書いてありました
どうやらキャストして取得するパターンとヘルパーを利用するパターンがあるようです。
サンプルシーンを作成

ButtonとRawImageだけの簡単な画面です
サンプルスクリプト
using System.Collections; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class WebRequester : MonoBehaviour { [SerializeField] private RawImage _rawImage; public void OnClickGetTexture() { StartCoroutine(GetTexture("https://picsum.phostos/200")); } private IEnumerator GetTexture(string url) { using var req = UnityWebRequestTexture.GetTexture(url); Debug.Log("[WebRequester] Send"); yield return req.SendWebRequest(); Debug.Log("[WebRequester] Recv"); if (req.result == UnityWebRequest.Result.Success) { var texture = DownloadHandlerTexture.GetContent(req); _rawImage.texture = texture; } else { Debug.LogError($"[WebRequester:ERROR] {req.downloadHandler.error != "" ? req.downloadHandler.error : req.error}"); } } }
こんな感じのスクリプトを用意してみました。ダウンキャストを利用するよりもこちらの方が素直かなと思い DownloadHandlerTexture.GetContent() を使用するパターンを採用しました。
たぶん、GetContent()の中ではキャストが発生していると思いますが!
インスペクタで設定
画像を表示する場所を設定
上記のサンプルスクリプトをアタッチした GameObject のインスペクタに RawImage を設定します。

ボタンのクリックリスナーを設定する
次にボタンを押したときに上記のサンプルスクリプトの OnClickGetTexture() が発火するように設定します。

試してみる
画像はこちらのサイトを利用させていただきます。

まとめ
データのダウンロード後、Texture2D まで出来ていて楽ちん