🌍

[Unity, Physics] timeScaleを変えずに物理演算を停止させる

2024/10/29に公開

背景

Unityにおいてゲームの動作を停止させるにはTime.timeScaleを弄ることがよくあると思いますが、物理演算のみを停止させ、それ以外の処理は通常通り進めたい場面もあると思います。

ネット上に

old.cs
Physics.autoSimulation = false;

のようにして物理演算を停止するという記事がありましたが、最新のUnityでは、

という警告が出ます。この警告が出る最新バージョンでの対応方法を書いている記事がなかったので誰かの役に立てれば幸いです。

方法

最新のUnityでは、Physics.simulationModeを変更することで物理演算のシミュレーションタイミングを変更することができます。

Physics.simulationMode = SimulationMode.Script;

とすることで、物理演算のシミュレーションモードをScriptに変更します。
SimulationMode.Scriptでは、コード内から自分でPhysics.Simulate()を呼び出すことで物理演算を進めることができます。
つまり、シミュレーションモードをScriptに変更し、その後に何も呼ばなければ物理演算を停止できるということです。
再度、物理演算を動かしたい場合は、

Physics.simulationMode = SimulationMode.FixedUpdate;

のように、初期設定であるFixedUpdateに戻します。

Discussion