[Unity] ゲームの時間進行を制御する
Unityでプレイ途中のゲームを一時停止してポーズ画面を表示させたい場合、ゲームの時間を停止する必要が出てきます。
進行中のゲームの現在時刻はTime.timeで取得できます。
これはゲーム開始からの経過時間(秒)です。
この現在時刻はTime.timeScaleの値を弄ることで、時間の進行速度を速くしたり、遅くしたり、あるいは停止したりできます。
Time.timeScaleの初期値は1です。
これは本来の進行速度の1倍、すなわち通常の進行速度です。
ここをたとえばTime.timeScale = 0.5とすれば進行速度が半分になります。
スローモーションが実現できます。
Time.timeScale = 0にすると進行速度が完全に止まります。
時間の進行が停止するので、ポーズ画面を簡単に実現できます。
しかし、そうすると時間の進行が止まってしまうためにボタン操作やスクロールなどができなくなってしまいます。
現在時刻には、Time.timeScaleの値に関係なく通常の速度で進行する値があります。
これはTime.realtimeSinceStartupから取得できます。
Time.realtimeSinceStartupは常にTime.timeScale = 1の状態で時間が進行します。
ボタン操作やスクロールなど時間の進行速度に左右されたくないシステム的な処理はこの値を使って実装したほうがよいでしょう。