Unityで試していた時に、以下のような出来事がありました。
Unityのプレイモードだと正常に動作しているが、ビルドした後に実行するとObject等の動きが遅かったりする。
実際のところはというと、
Unityのプレイモードだと正常に動作している(ように偶然見えている)が、ビルドした後に実行するとObject等の動きが(スクリプトで記述した通り、正常に)遅かったりする。
話は単純なので、今回何が起きていたのかの説明です。
原因としては以下の要素が組み合わさった結果でした。
- Time.fixedDeltaTimeをUpdateで利用した
- この時点で、移動速度がFPS依存になります
- その状態でプレイモードで速度を調整した
- 今回はFPS800近く出てます
- Updateの実行頻度がプレイモードとビルド後で差があった
- FPS60まで落ち、FPS依存の移動速度が落ちた
Unityのスクリプトの基本的な箇所でした。
Update内でfixedDeltaTimeを利用してしまったため、移動量等の計算結果が期待した値になっていないだけです。
FPSを測ってみました。
deltaTimeからFPSを、fixedDeltaTimeからFixedFPSを計算します。
最初にUnityのプレイモード。
次に、Buildした後に全画面で実行した結果。
当然ですがFixedFPSは同じです。
そして、FPSが10倍以上差があります。
改修については、deltaTimeを利用するかFixedUpdateに移動するかですが、物理演算に影響を与える場合はFixedUpdateに移動するのが良いでしょう。
おまけ:
FixedUpdateでTime.deltaTimeを呼ぶとTime.fixedDetitaTimeが取得できます。(https://docs.unity3d.com/ja/2021.1/ScriptReference/Time-deltaTime.html)
UpdateでもFixedUpdateでもTime.deltaTimeを使えば間違いではありません。