0から始めるUnity物理演算②FixedUpdate
物理シミュを解説する本連載も、ついに第2回です
FixedUpdateとdeltaTimeについて、必要な知識を身につけましょう!
【Unity道場】物理シミュレーション完全マスターで勉強したことを元にしています。
今日の目次です。比較的短いです。
毎度毎度、講義のスライドを見ながらですと理解しやすいです!
FixedUpdateとは
ゲームは微小時間内に処理をして、それを連続につなげることで動きを表現してます。
この微小時間をフレームと呼んだりします。
あるフレーム内に処理が終わらないと、次のフレームに超過分が借金されてしまいます。
さらに困ったことに、借金を返したフレームは、本来自分がすべき処理をせず休んでしまいます。
では、休んだ分はどうなるのでしょう?
休んだ次のフレームが、2回処理を行うことで解決します。
このフレームがちゃんと仕事してくれないとまた借金することになるので、こいつを「責任重大フレーム」と呼ぶことにします。
このように、責任重大フレームでは物理更新が2回されているんですね。
また、処理落ちがかさむと2回どころか3回、4回も1つのフレーム内で物理更新を行うハメになるので注意が必要です。
fixedDeltaTImeとは
物理更新1回にかかる時間がTime.fixedDeltaTimeです。
このdeltaTimeというのは微小時間を表わし、第1回で登場したに相当します。
"fixed"(固定された)とあるように、fixedDeltaTimeの長さは常に一定です。もし処理落ちしたら、責任重大フレームでもう一回fixedDeltaTimeをカウントすることで合計時間を正しいものに合わせています。
Update関数内ではTime.deltaTimeを使用しますが、deltaTimeは1回あたりの長さを調整してつじつま合わせをします。
具体的に言うと、処理落ちのあと、休んだフレームでのdeltaTImeは0になってしまいますが、
責任重大フレームでのdeltaTimeを長くすることで合計の時間は変化せず、正しいものに合っているのです。
どっちを使えばいいの?
よく物理計算はFixedUpdateでやれと言われますが、この辺の違いを理解してあえてUpdate
を使っているなら、それはそれで問題が起きないのでOKだそうです。
積分はの間の変化量、微小なものを足し合わせる計算ですが、
足し合わせる量は FixedUpdateでもUpdateでも変化しません。
まとめ
- 処理落ちのために、1つのフレームで複数回物理処理を行うことがある。
- deltaTimeは微小時間に相当
- fixedUpdateを使おうが、Updateを使おうが、積分結果に影響はない。
次回は力についてです!