MRが楽しい

MRやVRについて学習したことを書き残す

HoloLens2でホロモンアプリを作る その14(00秒開始の分刻みで定期実行する処理を追加する)

本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
f:id:bluebirdofoz:20210310231209j:plain

今回は時刻ごとに発生するホロモンの変化を監視するため、00秒開始の分刻みで定期実行する処理を追加するメモです。

00秒開始の分刻みでの処理実行

UniRx の Timer のファクトリメソッドを利用します。
Timer の利用方法については以下の記事を参照ください。
bluebirdofoz.hatenablog.com

Timer の開始までのウェイト指定に 00 秒までの待機時刻を計算して指定します。
実行間隔には 1 分を指定すれば 00 秒開始の分刻みで処理を実行することができます。
・HoloMonPhysicalConditionSingleton.cs

using UnityEngine;
using System;
using UniRx;

namespace HMProject.HoloMon
{
    public class HoloMonPhysicalConditionSingleton : MonoBehaviour
    {
        /// <summary>
        /// 時刻判定(分刻み)のトリガー
        /// </summary>
        IDisposable p_MinuteTimeTrigger;

        
        /// <summary>
        /// 開始処理
        /// </summary>
        void Start()
        {
            // 初回実行の00秒までのウェイトを設定し、1分毎にトリガーを実行する
            p_MinuteTimeTrigger = Observable
                .Timer(TimeSpan.FromSeconds(60.0f - DateTime.Now.Second), TimeSpan.FromMinutes(1.0f))
                .SubscribeOnMainThread()
                .Subscribe(x => {
                    ChangeOverTimeCondition(DateTime.Now);
                })
                .AddTo(this);
        }

        /// <summary>
        /// 定期処理
        /// </summary>
        void Update()
        {
        }

        /// <summary>
        /// 時間経過によるコンディション変化を管理する
        /// </summary>
        /// <param name="a_DateTime"></param>
        private void ChangeOverTimeCondition(DateTime a_DateTime)
        {
            Debug.Log("ChangeOverTimeCondition : " + a_DateTime.ToString());
        }
    }
}

f:id:bluebirdofoz:20210310231228j:plain

確認の結果、凡そ00秒の辺りで1分毎の処理が実行されるようになりました。
初期化時の負荷によるバラツキが発生しますが、今回はそこまで厳密に00秒開始としたい訳ではないのでこの実装で良しとしました。
f:id:bluebirdofoz:20210310231249j:plain