本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
今回はホロモンの睡眠時間(TimeSpan型)をInspectorビューから設定するメモです。
TimeSpan型をInspectorから設定する
ホロモンの睡眠時間はTimeSpan 型で取り扱っているため、そのままで Inspector 上に表示できません。
今回は文字列で設定した睡眠時間を TryParse() 関数で読み取る形で実装しました。
docs.microsoft.com
以下のように Inspector ビューから文字列で睡眠の開始時間と終了時間を設定します。
実装コード
以下の通り、初回参照時のみ Inspector の文字列をパースして TimeSpan 型の設定を取得しています。
TimeSpan 型は構造体のため、初回判定を行うために null 許容値型を利用しています。
・HoloMonSleepSetting.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace HoloMonApp.ConditionSpace { /// <summary> /// ホロモンの睡眠設定 /// </summary> [Serializable] public class HoloMonSleepSetting { [SerializeField, Tooltip("睡眠開始時間設定テキスト(初期化時のみ有効)")] private string p_StartTimeText; /// <summary> /// 睡眠開始時間帯(private) /// </summary> private TimeSpan? p_StartTime; /// <summary> /// 睡眠開始時間帯 /// </summary> public TimeSpan StartTime => GetStartTime(); [SerializeField, Tooltip("睡眠終了時間設定テキスト(初期化時のみ有効)")] private string p_EndTimeText; /// <summary> /// 睡眠終了時間帯(private) /// </summary> private TimeSpan? p_EndTime; /// <summary> /// 睡眠終了時間帯 /// </summary> public TimeSpan EndTime => GetEndTime(); public HoloMonSleepSetting() { // 引数無しの場合時間帯は null のまま // Inspectorビューのテキストから設定読込を行う } public HoloMonSleepSetting(TimeSpan a_StartTime, TimeSpan a_EndTime) { p_StartTime = a_StartTime; p_EndTime = a_EndTime; } private TimeSpan GetStartTime() { if (p_StartTime == null) { TimeSpan parceTime = new TimeSpan(); // 初期化時のみテキストから時刻指定の取得を試みる if (TimeSpan.TryParse(p_StartTimeText, out parceTime)) { p_StartTime = parceTime; Debug.Log("SleepStartTimeSpan : " + p_StartTime.ToString()); } else { p_EndTime = new TimeSpan(); Debug.LogError("Parse Error : SleepStartTimeText"); } } return p_StartTime ?? new TimeSpan(); } private TimeSpan GetEndTime() { if (p_EndTime == null) { TimeSpan parceTime = new TimeSpan(); // 初期化時のみテキストから時刻指定の取得を試みる if (TimeSpan.TryParse(p_EndTimeText, out parceTime)) { p_EndTime = parceTime; Debug.Log("SleepEndTimeSpan : " + p_EndTime.ToString()); } else { p_EndTime = new TimeSpan(); Debug.LogError("Parse Error : SleepEndTimeText"); } } return p_EndTime ?? new TimeSpan(); } } }
動作確認
シーンを再生して動作を確認します。
デバッグログから Inspector で設定した睡眠時間が読み込まれていることが確認できます。