本日は UniRx の小ネタ枠です。
UniRxを使って一定間隔で処理を行う手順を記事にします。
UniRxを使って一定間隔で処理を行う
UniRx を使って一定間隔で処理を行いたい場合、Interval または Timer のファクトリメソッドを利用します。
reactivex.io
reactivex.io
Interval メソッドは実行間隔の指定のみで動作しますが、Subscribe直後には実行されず、一度待機してから実行されます。
Subscribe 直後から即座に実行したい場合は Timer メソッドを使用して待機時間を 0 で指定します。
サンプルスクリプト
以下のサンプルスクリプトを作成してみました。
・UniRxIntervalTest.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; // UniRxの参照 using UniRx; public class UniRxIntervalTest : MonoBehaviour { // 起動時処理 void Start() { Debug.Log("Time : " + Time.time + ", Main ThreadID:" + System.Threading.Thread.CurrentThread.ManagedThreadId); // 10秒ごとに実行(Timerかつ第一引数に 0 指定の場合、Subscribe後に即座に1回目の処理が実行される) Observable.Timer(System.TimeSpan.Zero, System.TimeSpan.FromSeconds(10)) .Subscribe(x => { Debug.Log("Timer Time : " + Time.time + ", No : " + x.ToString() + ", ThreadID : " + System.Threading.Thread.CurrentThread.ManagedThreadId); } ).AddTo(this); // 10秒ごとに実行(Intervalの場合、Subscribe後に待機時間を待機してから1回目の処理が実行される) Observable.Interval(System.TimeSpan.FromSeconds(10)) .Subscribe(x => { Debug.Log("Interval Time : " + Time.time + ", No : " + x.ToString() + ", ThreadID : " + System.Threading.Thread.CurrentThread.ManagedThreadId); } ).AddTo(this); } }
シーンの空オブジェクトにスクリプトをアタッチします。
シーンを実行して動作を確認します。
以下の通り、指定の時間間隔で処理が実行されます。