概要
空気抵抗を持つ物体の放物線の座標を取得できる関数を作りました。
コード
下記の関数をお手持ちの PhysicsUtil クラスに追加してご利用ください。
public static Vector3 ParabolaPos(Vector3 position, Vector3 velocity,
float time, float drag = 0f, Vector3? gravity = null, float? deltaTime = null)
{
if (!gravity.HasValue) gravity = Physics.gravity;
if (!deltaTime.HasValue) deltaTime = Time.fixedDeltaTime;
if (drag <= 0f)
{
return position + velocity * time + gravity.Value * 0.5f * (time * time + time * deltaTime.Value);
}
var r = Mathf.Clamp01(1f - drag * deltaTime.Value);
var r2 = 1f / (1f - r);
var n = time / deltaTime.Value;
var p = r * (1f - Mathf.Pow(r, n)) * r2;
var result = position + velocity * deltaTime.Value * p;
return result + gravity.Value * r * deltaTime.Value * deltaTime.Value * r2 * (n - p);
}
参考にさせていただいたブログ