読者です 読者をやめる 読者になる 読者になる

いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU
{スポンサーリンク}

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

Unity Tips

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 というクラスにデータを載せてリクエストします。

Amazon.co.jpアソシエイト