スマゲ

スマートなゲームづくりを目指して日々精進

Unityで時間を扱う

Unityでゲームでよく使いそうな時間関連の情報を得る方法をいつくか挙げます

・現在時刻
・UnixTimeの変換
・フレーム数の取得
・経過時間の取得
・1フレームごとの時間の取得

■現在時刻
c#のDateTimeを利用
Systemの名前空間を追加

using System;

以下のスクリプトで取得

Debug.Log(DateTime.Now);

出力
f:id:sanukin39:20160409231548p:plain

■UnixTimeを取得
DateTimeからUnixTimeを取得するメソッドを作成

using System;

public static class TimeUtil {

    private static DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);

    // DateTimeからUnixTimeへ変換
    public static long GetUnixTime(DateTime dateTime)
    {
        return (long)(dateTime - UnixEpoch).TotalSeconds;
    }

    // UnixTimeからDateTimeへ変換
    public static DateTime GetDateTime(long unixTime)
    {
        return UnixEpoch.AddSeconds(unixTime);
    }
}

実行

Debug.Log(TimeUtil.GetUnixTime(DateTime.Now));

出力
f:id:sanukin39:20160409233717p:plain

■起動後のフレーム数
Time.frameCountで起動したからのフレーム数を取得できる

void Update(){
    Debug.Log(Time.frameCount);
}

出力
f:id:sanukin39:20160410003831p:plain

■起動後の経過時間

Time.realtimeSinceStartupでゲームが起動してからの時間を取得できる

void Update(){
    if(Time.frameCount % 30 == 0){
        Debug.Log(Time.realtimeSinceStartup);
    }
}

出力
f:id:sanukin39:20160410002225p:plain

■1フレームにかかった時間
Time.deltaTimeで直前の1フレームに要した時間を取得できる

void Update(){
    Debug.Log(Time.deltaTime);
}

f:id:sanukin39:20160410003156p:plain

■まとめ
今回はよく使いそうな情報のまとめでしたが、今後はこの情報をゲームでどのように利用するかをまとめていこうと思っています

■参考
docs.unity3d.com