UniRxのシンプルなサンプルの取扱説明書
前(ObservableWWW.Get ダウンロード)
UniRxのシンプルなサンプルの取扱説明書 その10(プッシュを遅らせる Delay)
一定時間後に実行
今回はわかりやすいそして何度か出てきているTimerとIntervalを紹介します。
それぞれ一定時間後、一定時間ごとにプッシュしてくれます。
例えばアニメーションとか、なんかそんな感じのものを作るときに便利です。
JavaScriptのsetTimeoutやsetIntervalに近い動作をします。
今回はそれぞれ5秒後に青くなるGameObjectと50msごとに徐々に緑になっていくGameObjectを作ります。
前準備
TimerというTimerSample.csが貼り付けられているGameObject
IntevalというIntevalSample.csが貼り付けられているGameObject
5秒後に青くなる
n秒後に何かを起こしたい場合Timerが便利です。
今回は5秒後にGameObjectを青くします。
コードはこんな感じ
using UnityEngine;
using System.Collections;
using UniRx;
using System;
public class TimerSample : MonoBehaviour {
// Use this for initialization
void Start () {
//5秒たったらプッシュ
Observable.Timer(TimeSpan.FromSeconds(5)).Subscribe(_ =>
{
//青くする
GetComponent<SpriteRenderer>().color = Color.blue;
}).AddTo(this);
}
}
特に難しいところはないと思います。
Observable.Timer(TimeSpan dueTime)
でdueTime後に1度だけ値がプッシュされます。
で、青くしています。
50msごとに徐々に緑に
一定時間ごとに起こしてほしい処理を記述するにはIntervalが便利です。
アニメーションとかをメインの処理と分離できるのでおすすめ。
今回は徐々に緑にしていきます。
using UnityEngine;
using System.Collections;
using UniRx;
using System;
public class IntevalSample : Base {
// Use this for initialization
void Start () {
//50ms毎に購読する
Observable.Interval(TimeSpan.FromMilliseconds(50)).Subscribe(l =>
{
//緑色に近づける
GetComponent<SpriteRenderer>().color = Color.Lerp(Color.white, Color.green, l / 200.0f);
}).AddTo(this);
}
}
先ほどのTimerがIntervalに変わっただけです。
Observable.Interval(TimeSpan dueTime)
で一定時間ごとにプッシュしてくれます。
プッシュされてくる値は何回目のプッシュかなのでそれを使ってColor.Lerpを使用して色を徐々に変えていきます。
実行結果
というわけでこんなかんじで5秒後に青になるものと緑に近づくものが出来ました。
補足
Frame数を数えて同じ動作をするTimerFrameとIntervalFrameもあります。