2020年に入って、1カ月サボってしまいました(..*) オハズカシイ・・
年末から公開アプリを作り始めたのですが、
絵が作れない、ゲーム性がない、アイディアが足りない
そんな感じでテンションが下がってしまい、ズルズルと今日まで…才能ないな~(´`;)
このままでは終わってしまうので、
続ける為に無理やりお題を設けて、ブログを更新する事にしました。
今回のテーマは”時間”です。
ゲームの時間管理は、アクション系やパズル系でも多用するかと思います。
時間管理をするには、色々な方法があると思うので勉強してみます。
・Timeクラス
これが一番使われています。
フレームを利用した時間経過を測定するクラスで、
主にTime.TimeやTime.deltaTimeが使われます。
・DateTime構造体
現在時刻の取得ができます。
開始時間を取得して現時刻の差で取得できます。
・コルーチンで一定時間処理
例外的ですが、コルーチンでも処理はできるかと思います。
他にもありそうですが、現段階で理解しているのは、この辺りです。
早速、Timeクラスから使ってみたいと思います。
Time.time
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeManager : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Debug.Log(Time.time);
}
}
Time.timeはPLAY開始からの経過時間を取得できます。
シーンの切り替え時は、シーン開始からの時間が計測できます。
Time.deltaTime
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeManager : MonoBehaviour
{
private float time;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
time += Time.deltaTime;
Debug.Log(time);
}
}
deltaTimeは、フレーム毎の時間計測ができます。
deltaTimeは、意見がいろいろで分かりにくいのですが、
単純にUpdateの呼び出し時間と捉えてもいいかと思います。
フレームレートは、端末の処理能力で変わるので、
deltaTimeでUpdateの時間を取得しておくと処理時間が把握できます。
処理時間を計測する場合は、Update毎の秒数なので加算する必要があります。
最初からの経過時間ならTime.time
途中からの経過時間(スタートボタンを押したなど)ならTime.deltaTime
で使い分けできそうです。
DateTime
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class TimeManager : MonoBehaviour
{
private DateTime starttime;
// Start is called before the first frame update
void Start()
{
starttime = DateTime.UtcNow;
}
// Update is called once per frame
void Update()
{
Debug.Log(DateTime.UtcNow-starttime);
}
}
DateTimeを使う場合は、ネームスペースにSystemを宣言します。
これは単純に開始時刻と現時刻の差を割り出しているだけです。
Time.timeと似ていますが、開始時間の取得位置によって、
途中からの時間経過も計測できます。
時間経過を読み取るには、使い回しが面倒かも…
コルーチン
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimeManager : MonoBehaviour
{
private float time;
IEnumerator Start()
{
while (true)
{
time += 0.1f;
Debug.Log(time);
yield return new WaitForSeconds(0.1f);
}
}
}
この記事へのコメント