MRが楽しい

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

UnityのInspectorビューでDateTimeの値を確認する

本日は Unity の小ネタ枠です。
UnityのInspectorビューでDateTimeの値を確認する方法を試したので記事にします。

DateTimeのInspector表示

以下のようにクラスの public なメンバ変数に DateTime 型を設定しても Inspector ビューには表示されません。
・HoloMonSaveData.cs

// ...略...
namespace HoloMonApp.SaveDataSpace
{
    /// <summary>
    /// データファイル構造クラス
    /// </summary>
    [Serializable]
    public class HoloMonSaveData
    {
        /// <summary>
        /// 保存時刻
        /// </summary>
        public DateTime SavedDataTime;

        /// <summary>
        /// 保存バージョン
        /// </summary>
        public SavePackageVersion SavedPackageVersion;

// ...略...
    }
}

f:id:bluebirdofoz:20220106234852j:plain

ホロモンアプリのセーブロードの動作確認を行うにあたってリアルタイムに値の変化を確認したかったため、Inspector ビューに DateTime の値を表示する方法を模索しました。

実装コード

結果、以下のように UnityEditor でのみ Inspector ビューに現在の設定時刻を表示するクラスを作成しました。
・SaveDateTime.cs

using System;
using System.Xml;
using System.Xml.Serialization;

namespace HoloMonApp.SaveDataSpace
{
    [Serializable]
    public class SaveDateTime
    {
        // TODO : XmlSerialize利用のため、public とする
        public DateTime Value;
#if UNITY_EDITOR
        // TODO : DateTimeText => Value.ToString("yyyy-MM-dd HH:mm:ss") の記法では
        //        Inspector ビューに表示されないため、コンストラクタで値を代入する
        [XmlIgnore]
        public string DateTimeText;
#endif
        public SaveDateTime(DateTime a_Value)
        {
            Value = a_Value;
#if UNITY_EDITOR
            DateTimeText = Value.ToString("yyyy-MM-dd HH:mm:ss");
#endif
        }

        // XmlSerialize利用のため、引数無しのコンストラクタを定義する
        private SaveDateTime() { }
    }
}

データクラス側で DateTime 型の代わりに上記のクラスのメンバ変数を設定します。
・HoloMonSaveData.cs

// ...略...
namespace HoloMonApp.SaveDataSpace
{
    /// <summary>
    /// データファイル構造クラス
    /// </summary>
    [Serializable]
    public class HoloMonSaveData
    {
        /// <summary>
        /// 保存時刻
        /// </summary>
        public SaveDateTime SavedDataTime;

        /// <summary>
        /// 保存バージョン
        /// </summary>
        public SavePackageVersion SavedPackageVersion;

// ...略...
    }
}

以下の通り、UnityEditor 上では設定された日時が Inspector ビューで確認できるようになりました。
f:id:bluebirdofoz:20220106234905j:plain

課題

データの書き出しと読み込みに XmlSerialize を行うため、メンバ変数のアクセサビリティに問題がある形になってしまいました。
より良い改善策が見つかれば改めて記事にします。