読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

アプリ内とアプリ外、2つの経過時間について

Unityは2つの時間を管理している。1つ目がゲーム内の時間、もう一つがゲーム外の時間だ。

ゲーム内の時間は単純に「ゲーム内で経過した時間」を指す。それは例えばモンスターを狩る時間であったり、マリオの時間制限だったり、ゲームを停止するとカウントが停止する物を指す。

逆にゲーム外時間はと言えば、これは「実際に経過した時間」を指す。一番分かりやすいのがソシャゲの回復時間で、これはアプリを終了しても止まらない。


ゲーム外時間を求めるのは簡単で、システム時間を使えば良い。

具体的にはシステム時間の現在の時間からタイマー開始時間を引いてやれば、その差分でタイマー稼働時間が求められる。システム時間を求めるにはTime.realtimeSinceStartupを使うのが楽だ。

ちなみに、この方法は「アプリが起動した時間を0とする」ので、アプリが終了すると破綻する。

なので、実際はタイマー開始日時を求め、現在の日時から開始日時を引いてやるのが良さそうだ。


ゲーム内時間を求めるのも簡単だ。ゲーム内の経過時間はTime.timeクラスで求めることができるので、ゲーム外時間と同じように現在の時間からタイマー開始時間を引いてやれば良い。

ゲーム内時間を求める方法にはTime.deltaTimeを加算する方法もあるが、floatを加算するのは丸め誤差的にお勧めできない。

ちなみにTime.timeはTime.timescaleの影響を受ける。つまりTimeScaleを0にすると進まなくなる。
これはWaitForSecondsも同様なので、ゲーム内タイマー制御を使う場合は気をつけるお勧め。