🌍
[Unity, Physics] timeScaleを変えずに物理演算を停止させる
背景
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