RigidBodyの自由落下を再現してみる
Unityの物理エンジンを使わずに、自前で簡単な物理演算を実装しようと思い、 まずはRigidBodyの自由落下を再現してみました。
using UnityEngine; public class MyRigidBody : MonoBehaviour { // 重力加速度[m/s/s] [SerializeField] private float _graviry = 9.80665f; // 速度[m/s] private Vector3 _velocity; private void FixedUpdate() { // [m/s] = [m/s/s] * [s] _velocity.y += -_graviry * Time.fixedDeltaTime; var p = transform.position; // [m] = [m/s] * [s] p += _velocity * Time.fixedDeltaTime; transform.position = p; } }
物理演算を行う時は、Update関数よりも、更新間隔が安定しているFixedUpdate関数で行うのが望ましいです。 加速度と速度の両方にfixedDeltaTimeを掛けるのが重要なポイントです。単位を考えながら計算するとわかりやすいです。
時間が経つと徐々にRightBodyと差が出てきますが、概ね同じ挙動になりました。 この誤差の原因を調べると深みにはまりそうなので、またそのうち…