search
LoginSignup
8

More than 5 years have passed since last update.

posted at

updated at

UniRxのシンプルなサンプル その8(ObservableWWW.Get ダウンロード)

UniRxのシンプルなサンプルの取扱説明書
前(完了の通知)
次(TimerとInterval 一定時間後に実行)

ファイルをダウンロードする

そろそろ使えるTipsをお届けしたいので今回はHTMLをダウンロードしてみます。
ファイルのダウンロードとかもうそれこそ明らかにRxの得意分野ですからね。

ついでに進行状況もとっちゃいます。
今回少し長いです。

前準備

そろそろ特別な状況でない限りSSなしです。
WWWというGameObjectにWWWSample.csというスクリプトを貼り付けておきます。

ダウンロード

WWWのダウンロード周りを担ってくれるのがObservableWWW.Getメソッドです。
今回はとりあえず一つのファイルをとってきます。

完了したらゲームオブジェクトを青にして
デバッグログにタイトルを表示します。

ついでにDLの進行状況も取得しちゃいます。

ソースコードは以下のとおり

WWWSample.cs
using UnityEngine;
using System.Collections;
using UniRx;
using UniRx.Triggers;
using System;

public class WWWSample : MonoBehaviour {

    // Use this for initialization
    void Start()
    {
        //DLの進行度をプッシュしてくれるObservable
        ScheduledNotifier<float> progress = new ScheduledNotifier<float>();
        var watcher = progress.Subscribe(prog => Debug.Log(prog));//進行度の表示

        //ダウンロード
        var getter = ObservableWWW.Get("https://example.com/", null, progress)
            .Subscribe(body =>
        {
            //完了したら青に
            GetComponent<SpriteRenderer>().color = Color.blue;
            //タイトルを表示
            Debug.Log(body.Split(new[] { "<title>", "</title>" }, StringSplitOptions.None)[1]);

        });

        //gameObjectが削除されたらどちらも削除
        this.OnDestroyAsObservable().Subscribe(_ => {
            watcher.Dispose();
            getter.Dispose();
        });

    }
}

まず
ObservableWWW.Get("https://example.com/", null, progress)

ObservableWWW.Get(string url, Hash headers = null, IProgress progress = null)
で定義されています。
urlはまんまurlです。
headersもヘッダです。
progressが後で説明する進行状況を教えてくれるすごい人です。
でDL完了したらSubscribe内に値がプッシュされます。
なのでSubscribeで青色にしてDebug.Logでタイトルを(雑なやり方で)取得して表示しています。

もう一方の
ScheduledNotifier progress = new ScheduledNotifier();
がGetの第三引数ですがこれもIObservableになっています。
これにGetは進行状況をプッシュしてくれます。
なのでその値をそのまま出力しています。

最後にthis.OnDestroyAsObservable()はDestroyされたら呼び出されます。
後片付けです。

実行結果

というわけでDL完了です!

スクリーンショット 2015-05-06 01.37.59.png

その他のメソッド

ObservableWWWには取得したWWWをそのまま返してくれるGetWWWとかpostでリクエスト投げてくれるPostメソッドとかもあります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8