Unity:WebGLでUnityWebRequestを使う

最終更新日



はじめに

Unityのようなマルチプラットフォーム開発のツールでは、UnityWebRequest クラスのような汎用化されたWebアクセスクラスが用意されます。

Unityを知らない方は、ぜひ こちらの記事 をご参照ください。

Unityで使えるネットワーククラス

WebGLでネットワークを利用して、データを取得する場合、Unityドキュメント「WebGL のネットワーク」では以下のような記載となっています。

WebGL でネットワーク機能が必要な場合、現段階では Unity の WWW UnityWebRequest クラスを使用するか、WebGL をサポートする新しい Unity Networking 機能を使用するか、または、Javascript の WebSocket や WebRTC を使用して独自のネットワークを実装する必要があります。

以下の3機能のどれかを使えば、WebGLプラットフォームからネットワーク越しにデータを取得できます。

  • WWW クラス
  • UnityWebRequest クラス
  • Unity Networking機能

また、注意点としては同期でAPIを書く際に、「while(!www.isDone) {}」として処理完了を待ちますが、WebGLプラットフォームではこの記述をするとブラウザがフリーズするので、非同期(コルーチン と yield)もしくは、非同期(async/await)を用いて実装しましょう。

なお、async/awaitで実装する場合には、【Unity】Unity 2017 でコルーチンの代わりに async / await を使用するを参照してください。

ソースコード


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class DownLoadScript : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Download());
    }

    IEnumerator Download()
    {
        UnityWebRequest request = UnityWebRequest.Get("https://www.google.co.jp/");

        // データの取得
        yield return request.SendWebRequest();

        // 取得したデータをログに出力
        var html = request.downloadHandler.text;
        Debug.Log(html);
    }
}

わかりにくいですが、ログ出力ウィンドウに取得したHTMLが正常に表示されています。

なお、データ取得先のHPが、他のHPからのリクエストを拒否している場合、CORSエラーが表示されますので気を付けてください。
今回のサンプルでは見事に表示されましたので、データ取得先を変更して確認してみてください。







よければ、SNSにシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする