UniRxのシンプルなサンプルの取扱説明書
[前(完了の通知)]
(http://qiita.com/Marimoiro/items/31cad556e1675c557be3)
次(TimerとInterval 一定時間後に実行)
ファイルをダウンロードする
そろそろ使えるTipsをお届けしたいので今回はHTMLをダウンロードしてみます。
ファイルのダウンロードとかもうそれこそ明らかにRxの得意分野ですからね。
ついでに進行状況もとっちゃいます。
今回少し長いです。
前準備
そろそろ特別な状況でない限りSSなしです。
WWWというGameObjectにWWWSample.csというスクリプトを貼り付けておきます。
ダウンロード
WWWのダウンロード周りを担ってくれるのがObservableWWW.Getメソッドです。
今回はとりあえず一つのファイルをとってきます。
完了したらゲームオブジェクトを青にして
デバッグログにタイトルを表示します。
ついでにDLの進行状況も取得しちゃいます。
ソースコードは以下のとおり
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メソッドとかもあります。