Help us understand the problem. What is going on with this article?

UniRxのシンプルなサンプル その9(TimerとInterval 一定時間後に実行)

More than 3 years have passed since last update.

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を青くします。
コードはこんな感じ

TimerSample.cs
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が便利です。
アニメーションとかをメインの処理と分離できるのでおすすめ。
今回は徐々に緑にしていきます。

IntervalSample.cs
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秒後に青になるものと緑に近づくものが出来ました。
スクリーンショット 2015-05-06 15.55.39.png

補足

Frame数を数えて同じ動作をするTimerFrameとIntervalFrameもあります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした