UnityWebRequest入門資料
― UnityでのHTTP通信の基礎と実践 ―
目次
1. UnityWebRequestとは
UnityWebRequest は、Unityにおけるネットワーク通信(HTTP通信)を行うためのクラスです。Web APIと通信したり、外部ファイル(JSON、画像、音声など)を取得・送信したりできます。
旧 WWW クラスの後継であり、柔軟かつ安全で高機能なAPIです。
2. 主な用途
- ランキングやログイン情報などの REST API 通信
- Webサーバーからの画像や音声のダウンロード
- JSON形式のデータのやり取り
- クラウドサービス(Firebase, PlayFab, Supabaseなど)との連携
- アップロード(スクリーンショット、ログ、ユーザーデータなど)
3. 基本的な使い方
3.1 GETリクエスト(データ取得)
IEnumerator GetRequest(string url)
{
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
Debug.Log(request.downloadHandler.text);
else
Debug.LogError(request.error);
}
3.2 POSTリクエスト(フォーム送信)
IEnumerator PostRequest(string url)
{
WWWForm form = new WWWForm();
form.AddField("user", "Yamada");
form.AddField("score", 1000);
UnityWebRequest request = UnityWebRequest.Post(url, form);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
Debug.Log("Success");
else
Debug.LogError(request.error);
}
3.3 JSON送信(UploadHandlerRaw)
IEnumerator PostJson(string url, string json)
{
var request = new UnityWebRequest(url, "POST");
byte[] body = System.Text.Encoding.UTF8.GetBytes(json);
request.uploadHandler = new UploadHandlerRaw(body);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
Debug.Log(request.downloadHandler.text);
else
Debug.LogError(request.error);
}
4. よく使うプロパティ・メソッド一覧
機能 | 説明 |
---|---|
UnityWebRequest.Get(url) | HTTP GETリクエストの送信 |
UnityWebRequest.Post(url, f) | フォームデータのPOST送信 |
UploadHandlerRaw | バイナリまたはJSONデータのアップロードに使用 |
DownloadHandlerBuffer | レスポンスデータをバッファとして受信(テキスト用途) |
SetRequestHeader() | HTTPヘッダーの設定(例:APIキー、Content-Type) |
responseCode | HTTPステータスコード(例:200, 404) |
result | 成否を示す列挙値(Success, ConnectionErrorなど) |
5. 注意点とベストプラクティス
- 通信処理は 必ず非同期(コルーチンやasync/await)で行う
- エラー処理は request.result や responseCode を使って確認
- WebGLの場合、CORS制限(クロスドメインポリシー)に要注意
- 通信結果をUIと連動させる際は、別スレッド処理に留意
- 長時間通信には進捗表示とタイムアウト対策を行う
6. 発展的な活用
利用例 | 実装ヒント |
---|---|
ダウンロード進捗表示 | request.downloadProgress で進捗率を取得可能 |
テクスチャ画像の取得 | DownloadHandlerTexture.GetContent(request) を使用 |
SSL証明書の回避(開発用途) | CertificateHandler をオーバーライド |
通信ログの保存 | request.uploadHandler.data や downloadHandler.text をログ出力 |
7. 関連リンク・参考資料
8. 画像ダウンロードの具体例(Texture2D)
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using UnityEngine.UI;
public class ImageLoader : MonoBehaviour
{
public string imageUrl = "https://example.com/image.png";
public RawImage targetImage;
void Start()
{
StartCoroutine(DownloadImage(imageUrl));
}
IEnumerator DownloadImage(string url)
{
UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Texture2D tex = DownloadHandlerTexture.GetContent(request);
targetImage.texture = tex;
}
else
{
Debug.LogError("Failed to download image: " + request.error);
}
}
}
- UnityWebRequestTexture.GetTexture() で画像取得
- RawImage や Renderer.material.mainTexture に貼り付け可能
9. WebGL向け制限と対策
制限
問題点 | 説明 |
---|---|
CORS制限 | サーバー側で Access-Control-Allow-Origin ヘッダーが必要 |
HTTPS必須 | HTTP通信はブロックされる可能性が高い(特にChrome) |
file:// 非対応 | ローカルファイル読み込み不可 |
キャッシュ制御 | ブラウザにキャッシュされるため、更新が反映されにくい場合あり |
対策
対策内容 | 解説 |
---|---|
サーバーにCORS対応を追加 | Access-Control-Allow-Origin: * を設定(Apache/Nginx) |
HTTPS環境でホスティング | サーバーおよびAPIのURLをすべてHTTPSに統一 |
ローカル検証はローカルサーバー使用 | http://localhost で実行(Live Serverなど) |
キャッシュ無効化設定 | URLにパラメータを付ける(例: ?t=timestamp)などで対応 |
10. まとめ
UnityWebRequestは、Unityでの外部通信機能を担う強力なクラスです。基本的なGET/POSTだけでなく、JSONや画像のやりとり、WebGL環境への対応など、さまざまな用途に柔軟に対応できます。
エラーハンドリングやセキュリティを考慮した設計とともに、ネットワーク機能の構築に活用してください。
ディスカッション
コメント一覧
まだ、コメントがありません