Edited at

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

More than 3 years have passed since last update.

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完了です!


その他のメソッド

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