ゲームに必要な機能の一つとしてPause機能(一時停止)があります。
UnityではTime.timeScaleの値を0にするとその機能を実装できます。
とても簡単で楽なのですが、今回の記事ではTime.timeScaleを0にすることで起きる現象について言及していきます。
Time.deltaTime と Time.Time
当然かもしれませんがTime.timeScaleを0にすると、この二つも動かなくなります。
Pause機能中は全てのオブジェクトが停止させたいなら問題ないですが、特定のオブジェクトやアニメーションは停止させたくないときがあると思います。
その場合は、
Time.deltatime ⇒ Time.unscaledDeltaTime
Time.time ⇒ Time.unscaledTime
とするとTime.timeScaleを0にしても停止しなくなります。
注意点
別に自分はPause中に動かしたいオブジェクトはないから関係ないわー
と思っている人に一応注意を
このTime.timeScaleはシーン遷移しても値が保存される(別シーンにいっても0のまま)ので
Pause中にそのままシーン遷移すると、次のシーンでもPauseのままとなってしまうという事態に陥ります。
なので、
シーン遷移する際はtimeScaleを必ず1に戻す
シーンを読み込み時にtimeScaleを1に初期化する
このどちらかを行いましょう。
コルーチン
やっぱり時間を止めているということなので、コルーチンのWaitForSecondsも使えなくなります。
その場合は
WaitForSeconds ⇒ WaitForSecondsRealtime
とすると問題なく使えます。
最後に
今回はTIme.timeScaleが与える影響について記事を書かせていただきました。
なんでこの記事を書いたかというと、
ちょうど注意点に書いていることに自分がおもいっきり嵌ったからです。
しかも、ゲーム締め切り1日前に
運が良い事に後輩がこのことについて知っていたので何とかなりましたが、
ちょっと覚え書き & 戒め の思いを込めて今回記事を書くことにした所存です