Unityは2つの時間を管理している。1つ目がゲーム内の時間、もう一つがゲーム外の時間だ。
ゲーム内の時間は単純に「ゲーム内で経過した時間」を指す。それは例えばモンスターを狩る時間であったり、マリオの時間制限だったり、ゲームを停止するとカウントが停止する物を指す。
逆にゲーム外時間はと言えば、これは「実際に経過した時間」を指す。一番分かりやすいのがソシャゲの回復時間で、これはアプリを終了しても止まらない。
ゲーム外時間を求めるのは簡単で、システム時間を使えば良い。
具体的にはシステム時間の現在の時間からタイマー開始時間を引いてやれば、その差分でタイマー稼働時間が求められる。システム時間を求めるにはTime.realtimeSinceStartupを使うのが楽だ。
ちなみに、この方法は「アプリが起動した時間を0とする」ので、アプリが終了すると破綻する。
なので、実際はタイマー開始日時を求め、現在の日時から開始日時を引いてやるのが良さそうだ。
ゲーム内時間を求めるのも簡単だ。ゲーム内の経過時間はTime.timeクラスで求めることができるので、ゲーム外時間と同じように現在の時間からタイマー開始時間を引いてやれば良い。
ゲーム内時間を求める方法にはTime.deltaTimeを加算する方法もあるが、floatを加算するのは丸め誤差的にお勧めできない。
ちなみにTime.timeはTime.timescaleの影響を受ける。つまりTimeScaleを0にすると進まなくなる。
これはWaitForSecondsも同様なので、ゲーム内タイマー制御を使う場合は気をつけるお勧め。