いんでぃーづ

ゲームいろいろ、いろいろ自由

UnityのHTTP通信クラスがいろいろできて便利

UnityにはHTTP用の WWWクラス が用意されています。
このクラス、ダウンロードしたデータを 各種コンポーネントで使えるように自動変換 してくれるスグレモノなのです。

テクスチャに変換する

JPG,PNG形式の画像ファイルをダウンロードした後は、texture プロパティからテクスチャとして取得できます。

ダウンロードが完了する前に参照すると、以下のようなエラーメッセージが出て、表示される画像もハテナマークになってしまうので注意。

You are trying to load data from a www stream which has not completed the download yet. You need to yield the download or wait until isDone returns true.

f:id:sugar_affordance:20161026111630p:plain

WWWはバックグランドで動作するため、データが使用可能になる(ダウンロードが終わる)まで待つ制御をする 必要があります。

コルーチン上で動かすのが無難でしょう。

以下サンプルソース

    void Start () {
        StartCoroutine(GetPng ());
    } 

    public IEnumerator GetPng() {
        // URLを指定してダウンロード
        WWW wwwTexture = new WWW ("http://www.test/sample.png");

        // ダウンロード完了まで待つ
        while (!wwwTexture.isDone) {
            yield return null;
        }

        // uGUIのテクスチャに設定
        RawImage img = gameObject.GetComponent<RawImage>();
        img.texture = wwwTexture.texture;

    } 

動画に変換する

OggTheora という形式の動画をダウンロードした場合、movieプロパティでMovieTextureクラスとして取得できます。

あんま使う人いないと思うので割愛します。公式参照

オーディオに変換する

データを全部ダウンロードしたあとに再生するか、ダウンロード中に再生を開始するかで方法が変わります。

使用可能なファイルフォーマットはこちらで確認できます。

ダウンロード再生

データを全部ダウンロードしてから再生する場合は audioClip プロパティを参照します。

こちらを使用する場合は、isReadyToPlayプロパティでの判定が必要です。

    void Start () {
        // コルーチンとしてダウンロード開始
        StartCoroutine(GetStreamingAudio ());
    } 

    public IEnumerator GetAudio() {
        // URLを指定してダウンロード
        WWW wwwAudio = new WWW ("http://www.test/loop.wav");


        // AudioSource に設定
        AudioSource audio = gameObject.GetComponent<AudioSource>();
        audio.clip = wwwAudio.audioClip;

        if (!audio.clip.isReadyToPlay) {
            yield return null;
        }

        // 再生!
        audio.Play(); 
    } 

ストリーミング再生

ストリーミングで再生する場合は GetAudioClip関数を使います。

条件として、ファイルのフォーマットが XM、IT、MOD、S3M のいずれかで、関数の第二引数に true を指定します。

なにそれ知らねーよって感じのフォーマットですが、全てMODという形式から派生しているフォーマットのようです。

自分には関係なさそうなので割愛します = ストリーミング再生はあきらめます。

POSTリクエストする

もちろんPOSTメソッドでのリクエストもできます。

その場合 WWWForm というクラスにデータを載せてリクエストします。


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。