本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
今回はInspectorから時刻を打ち込んでデバッグを行うメモです。
Inspectorから時刻を打ち込む
前回、時間経過でホロモンがお腹を空かせる実装を行いました。
bluebirdofoz.hatenablog.com
エディター上で様々なケースの動作確認を行おうとしましたが、DateTime 型はシリアライズできないため、Inspectorビューに表示できません
そこで以下の記事を参考に、DateTime 型を文字列で設定できるテスト用スクリプトを作成しました。
https://tempura-kingdom.jp/serializabledatetime/
以下が試しに作成したテスト用スクリプトです。
Inspector 上のボタンをクリックすると、入力した時刻情報で経過時間を算出する試験が実行されます。
・TestConditionLife.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace HMProject.HoloMonCondition { [RequireComponent(typeof(HoloMonConditionLifeSingleton))] public class TestConditionLife : MonoBehaviour { const string p_TimeFormat = "yyyy-MM-dd HH:mm:ss"; [SerializeField, Tooltip("参照テストクラス")] private HoloMonConditionLifeSingleton p_Target; [SerializeField, Tooltip("始点時刻")] private string p_StartTimeText; private DateTime p_StartTime; [SerializeField, Tooltip("終点時刻")] private string p_EndTimeText; private DateTime p_EndTime; /// <summary> /// 時刻計算処理を実行する /// </summary> public void ExecuteActivityElapsedTime() { int dayMinute = 0; // テキストの時刻を DateTime 型にパースする if (!DateTime.TryParse(p_StartTimeText, out p_StartTime)) { Debug.Log("Parse Error : StartTime"); p_StartTime = new DateTime(); } // テキストの時刻を DateTime 型にパースする if (!DateTime.TryParse(p_EndTimeText, out p_EndTime)) { Debug.Log("Parse Error : EndTime"); p_EndTime = new DateTime(); } dayMinute = p_Target.ActivityElapsedMinutes(p_StartTime, p_EndTime); Debug.Log("ExecuteActivityElapsedTime : " + dayMinute); } /// <summary> /// 開始処理 /// </summary> void Start() { // デフォルトの時刻を設定する p_StartTime = DateTime.Now; p_EndTime = DateTime.Now.AddMinutes(30.0f); // 時刻をテキストでInspectorに表示する p_StartTimeText = p_StartTime.ToString(p_TimeFormat); p_EndTimeText = p_EndTime.ToString(p_TimeFormat); } } }
・TestConditionLifeEditor.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; namespace HMProject.HoloMonCondition { # if UNITY_EDITOR // 拡張するクラスを指定する [CustomEditor(typeof(TestConditionLife))] // 継承クラスは Editor を設定する public class TestConditionLifeEditor : Editor { // GUIの表示関数をオーバーライドする public override void OnInspectorGUI() { // 元のインスペクター部分を表示 base.OnInspectorGUI(); // targetを変換して対象スクリプトの参照を取得する TestConditionLife testIns = target as TestConditionLife; // public関数を実行するボタンの作成 if (GUILayout.Button("ExecuteActivityElapsedTimeの実行")) { testIns.ExecuteActivityElapsedTime(); } } } # endif }
作成したテスト用スクリプトをオブジェクトに追加します。
シーンを再生して動作を確認します。
Inspector にテキストを入力してボタンをクリックすると、入力した任意の時刻情報で動作を試験することができました。