Contents
前提知識
Time系のまとめ
割と網羅されていて、timeScaleとの関係がわかりやすかった参考サイト
Time.timeScaleについて
時間の経過をスケールする。
1fで通常。2fで2倍速。0.5fで1/2速(つまりスローモーション)、0fで停止。
0fにするとFixedUpdate()が実行されなくなる。
Time.deltaTimeについて
基本的には前のフレームから今のフレームまでの経過時間。
ただし、FixedUpdate()内で使うと、Time.fixedDeltaTimeと同じになるので注意。
timeScaleに依存しているので、timeScaleを0fにすると、deltaTimeも0になる。
参考:https://dkrevel.com/time-deltatime/
Time.frameCountについて
経過したフレーム数の合計。
Update関数で使うと毎フレーム1ずつ増える。
timeScaleに依存しないので、timeScaleで0fを設定しても、frameCountの値は毎フレーム増えていく。
なので、Update()内で移動処理としてframeCountとか使っていると、timeScaleで0fにしても移動し続けるので注意。
SetActive()について
※調査中
Update()とLastUpdate()とFixedUpdate()の違いについて
Update・・・毎フレーム呼ばれる基本処理を書くところ
LateUpdate・・・様々な計算が終わった後の最終調整を書くところ
FixedUpdate・・・物理演算に関係する処理を書くところ(ゲーム内時間に関係するもの)
基本的な使い分けとして、キー入力が絡む処理はUpdateに書いた方がいい。具体的には移動処理とか。
一定間隔で呼び出されるFixedUpdateに書いてしまうと、タイミングによって入力を検知できなくなる。
参考:https://dkrevel.com/unity-explain/update-fixedupdate-lateupdate/
基本
Time.timeScale = 0f;
でポーズ。
Time.timeScale = 1f;
で再開。
応用
「基本」の止め方だと、FixedUpdateに書かれた処理は止まるが、Updateに書かれた処理は止まらない。
Updateに書かれた処理を止めたい場合は、Update関数の最初に下記を追加してポーズ中かどうかを判定する。
// ポーズ中なら何もしない if (Mathf.Approximately(Time.timeScale, 0f)) { return; }
コメントを残す