MRが楽しい

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

HoloLens2でホロモンアプリを作る その15(ホロモンが夜の時間帯に眠る)

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

ホロモンが夜の時間帯に眠るようにするメモです。

定期的に状態チェックを行う

決まった時間に眠るため、前回作成した定期的に実行されるスクリプトを利用します。
bluebirdofoz.hatenablog.com

夜の時間を判定する

睡眠の時間を判定するに、現在の時間帯をチェックする必要があります。
時間帯の判定には TimeSpan クラスを利用します。
docs.microsoft.com

0:00 ~ 6:00 の時間を判定して、範囲内の時間であれば睡眠モードに移行するコードを追加しました。
・HoloMonPhysicalConditionSingleton.cs

using UnityEngine;
using System;
using UniRx;

using HMProject.HoloMonLogic;

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

        
        /// <summary>
        /// 開始処理
        /// </summary>
        void Start()
        {
            // 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());

            // 睡眠時刻をチェックする
            CheckSleepTime(a_DateTime);
        }


        /// <summary>
        /// 睡眠時刻をチェックする
        /// </summary>
        /// <param name="a_DataTime"></param>
        private void CheckSleepTime(DateTime a_DataTime)
        {
            // 現在時刻から時刻情報だけを取得する
            TimeSpan timeOfDay = DateTime.Now.TimeOfDay;

            // 00:00 ~ 06:00 の範囲をチェックする
            TimeSpan startTime = new TimeSpan(0, 0, 0);
            TimeSpan endTime = new TimeSpan(6, 0, 0);

            // 時間の範囲内か
            if ((startTime <= timeOfDay) && (timeOfDay <= endTime))
            {
                // 範囲内なら眠り状態の開始要求を行う
                HoloMonCommandSingleton.Instance.StartSleep();
            }
        }
    }
}

f:id:bluebirdofoz:20210311071150j:plain

HoloLens2 にアプリを展開して動作確認を行います。
デバッグのために任意の時刻を変更したい場合は、以下の手順で時刻設定を変更します。
bluebirdofoz.hatenablog.com

深夜の時間帯になるとホロモンが眠るようになりました。
f:id:bluebirdofoz:20210311071208j:plain