· 

【Unity】DateTimeをインスペクターで表示する簡単な方法|Editor不要!コピペで使えるC#スクリプト付き解説【初心者向け】

個人開発者のブログ

Unity画像
この記事を見ているあなたは、DateTimeをインスペクター上で表示したいと考えてるはずです。
今回はそんな状況にピッタリの方法を、コード付きで紹介します。
*当記事はプロモーションも含みます。

目次

  1. 何故表示されないのか

  2. コードと使い方

  3. まとめ
     


何故表示されないのか

疑問画像

そもそも何故、DateTimeはインスペクター上で表示されないのか?
その理由は、Unityのシリアライズシステムの仕様と、DateTimeの構造と属性に起因します。
Unityのインスペクターに値を表示するには、対象のフィールドが Unityのシリアライズ対象である必要があります。Unityは独自のシリアライズシステムを使っており、以下のような制限があります。

public もしくは [SerializeField] 属性付きの フィールド

Unityがサポートする プリミティブ型int, float, string, bool, Vector3, Color, など

Unityのシリアライズ可能なクラス/構造体(例:Serializable 属性付きのクラスや構造体で、かつフィールドも対応しているもの)

 
一方DateTimeはUnityの標準シリアライズルールに適合しないため、インスペクターに表示されず、値の編集もできません。

これはDateTimeが.NET標準の高機能な型である一方、Unityのシリアライズ対象として想定されていないことに起因します。
 
ですが安心してください。
逆に考えれば、疑似的にUnity の標準シリアライズルールに適合させればいいのです。
次にコード付きで、その方法を紹介しましょう。

コードと使い方

やることもそのコード内容も割と単純。
string表示で標準シリアライズルールに適合した、新しいDateTimeを自作するだけ。

using System;
using UnityEngine;

[Serializable]
public class SerializableDateTime
{
    [SerializeField]
    private string dateTimeString;

    public DateTime DateTimeValue
    {
        get => DateTime.TryParse(dateTimeString, out var result) ? result : System.DateTime.MinValue;
        set => dateTimeString = value.ToString("yyyy-MM-dd HH:mm:ss");
    }
}
  

使い方は、以降インスペクター上でDateTimeを確認したい場合、DateTimeの代わりにSerializableDateTimeを使います。

 [SerializeField]
 private SerializableDateTime serializableDateTime;

↑のようにして定義でき、

serializableDateTime.DateTimeValue = DateTime.UtcNow.AddHours(9);

DateTimeValueに対して表示したいDateTime値を渡します。
これだけでインスペクターへ表示されるようになるのです。

おすすめUnityアセット3選【PR】

まとめ

いかがでしたか?
今回紹介したコードをコピペするだけで、DateTimeをインスペクター上で表示できます。
もし必要な際は、是非今回紹介したコードを活用してみて下さい。
 
ここまで記事を見て頂き、誠にありがとうございました。
これからも開発関連の記事は更新し続けるつもりなので、今後も機会があれば見てみてください。
では、また別の記事でお会いましょう。。_(:3 」∠)_

アソシエイト画像

最新Unity開発記事まとめ

☟Unity開発に関する最新情報をチェックしよう!

アソシエイト画像

イラスト守るくん(Google Play)

☝絵師必見!AI無断学習対策アプリ