夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLensアプリ内で現在の時間を取得する 後編 HoloLensアプリに現在時刻を表示する

前回はUnityでDateTime構造体を使用してデバイスの時間を取得しました。

redhologerbera.hatenablog.com

今回はHoloLens 2実機で時間を取得します。

〇アプリ

今回は以下のようなスクリプトを書きました。

using UnityEngine;
using System;
using TMPro;

/// <summary>
/// デバイス内の現在の時間を取得する。
/// </summary>
public class TimeGetter : MonoBehaviour
{
    [SerializeField]
    float _year;
    [SerializeField]
    float _month;
    [SerializeField]
    float _day;
    [SerializeField]
    float _hour;
    [SerializeField]
    float _min;
    [SerializeField]
    float _sec;
    [SerializeField]
    float _milisec;
    [SerializeField]
    TextMeshPro _timeText;
    // Start is called before the first frame update
    void Start()
    {
        _year = DateTime.Now.Year;
        _day = DateTime.Now.Day;
        _month = DateTime.Now.Month;
        _hour = DateTime.Now.Hour;
    }

    private void Update()
    {
        _min = DateTime.Now.Minute;
        Debug.Log(_min);

        _sec = DateTime.Now.Second;
        _milisec = DateTime.Now.Millisecond;

        _timeText.text = "現在時刻は"+_year.ToString()+"年" +_month+"月"+ _day.ToString() +"日"+ _hour.ToString() +"時"+ _min.ToString() +"分"+ _sec.ToString() +"秒"+ _milisec.ToString();
    }
}

Update関数内で分以下の単位を取得してテキストに書き出しています。

 今回は取得することが目的で上のようにしていますが、パフォーマンス等を考えると秒以下以外Start関数で取得して60になると値を更新する時計のような仕組みを創れればよりスマートに感じます。

適当なTextMeshProをアタッチします。

Unityで実行すると次ようになります。

f:id:Holomoto-Sumire:20200916120124j:plain

〇実機で確認

次に実機で確認していきます。

実機では[Settings],[Time & Language]で変更したタイムゾーンに合わせて表示が切り替わります。

youtu.be

〇応用

近年のゲームなどに見られる時間帯によって開始できるクエストが変わる機能を作成しました。

ここでは午前中と午後で区別しています。

  /// <summary>
    /// 実行できるクエストを判別します。
    /// </summary>
    public void AfternoonQuest()
    {
        Debug.Log(_hour);
        if (_questLimitTime < _hour)
        {
            _timeQuest.text = "このクエストは終了しました!また明日";  
        }
        else 
        {
            _timeQuest.text = "午後のクエストへようこそ";
        }
    }
    public void MooningQuest()
    {
        if (_questLimitTime < _hour)
        {
            _timeQuest.text = "午前のクエストへようこそ";
        }
        else
        {
            _timeQuest.text = "このクエストは終了しました!また明日";
        }
    }

実機で確認すると次のようになります。

youtu.be