[Unity] AddForceの実行タイミングについて
Unityを扱っているときに嵌ったことのメモです。
Rigidbodyを使ったGameObjectに対してRigidbody.AddForce()メソッドで力や加速度を加えたい場合、以下のようにして毎フレーム呼び出されるコールバックの中で処理を行うとします。
void Update() { var body = GetComponent<Rigidbody>(); body.AddForce(force, ForceMode.Force); }
しかし、このUpdate()メソッド内で呼び出した場合、FPSが固定でない場合に物体の動きが変わってしまう場合があります。
FPSが高いときは強い力が加わり、FPSが小さいときは力が弱くなってしまいます。
これは、AddForceメソッドは固定のフレームレートで呼び出されることを想定して設計されているためです。
したがって、固定のフレームレートで呼び出されるFixedUpdate()メソッド内で呼び出すことで上記の問題は解決できます。
void FixedUpdate() { var body = GetComponent<Rigidbody>(); body.AddForce(force, ForceMode.Force); }
リファレンスにもこのことについて記載されていますが、見落としがちな注意点として挙げておきました。
■参考サイト
http://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html