前回はUnityでDateTime構造体を使用してデバイスの時間を取得しました。
今回は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で実行すると次ようになります。
〇実機で確認
次に実機で確認していきます。
実機では[Settings],[Time & Language]で変更したタイムゾーンに合わせて表示が切り替わります。
〇応用
近年のゲームなどに見られる時間帯によって開始できるクエストが変わる機能を作成しました。
ここでは午前中と午後で区別しています。
/// <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 = "このクエストは終了しました!また明日"; } }
実機で確認すると次のようになります。