【问题标题】:RigidBody2D projectile to target calculationRigidBody2D 弹丸到目标计算
【发布时间】:2018-01-31 12:19:01
【问题描述】:

我正在使用此代码发射弹丸以击中地面目标。

我在 x 方向上施加一个冲力,这是根据它在目标上方的高度计算得出的。我正在通过将 x 距离除以由于重力而下降的时间来计算要添加的力,但这似乎不起作用:

float xDist = flag.position.x - transform.position.x;
float yDist = transform.position.y - flag.position.y;
float smallY = (4/9.81f) + (0.5f*-9.81f*Mathf.Pow((4/9.81f), 2));

yDist = yDist + smallY;

float yImpactForce = Mathf.Sqrt(2*9.81f*yDist);
float xForce = xDist/(Mathf.Sqrt(2*yDist/9.81f));

谁能帮帮我?

不确定我的计算是否错误,或者物理学是否与现实生活中的情况有很大不同。非常感谢任何帮助,谢谢

编辑:smallY 变量用于查找到弹丸轨迹峰值的距离

【问题讨论】:

  • 力就是加速。你不能将总距离除以时间来获得加速度,它们不是线性相关的(你得到的是一个恒定的速度)。
  • @Draco18s 但我正在尝试计算在重力作用下自然下落的时间内到达目的地的初始 x 速度。我该怎么办?

标签: unity3d vector unity5 projectile


【解决方案1】:

凭记忆

dist = (a * t2)/2

所以求解时间给出:

t = sqrt(2 * dist/a)

因此,您的初始速度计算应该是:

float fallTime = Mathf.Sqrt(2*yDist/9.81f);
float xVel = xDist/fallTime;

至少在现实世界中是这样。

由于您只是想影响特定的速度,因此使用ForceMode.VelocityChange 会更容易。

为了说明问题更新版本中的 y 速度,额外的时间将是,假设一个正(向上)y 分量(从 v = a * t 或 t = v/a,乘以 2 --一次减速到零,一次加速回到起始速度和高度,但在另一个方向):

float fallTime = Mathf.Sqrt(2*yDist/9.81f);
var yTime = 2 * (yVel / 9.81f);
falltime += yTime;
float xVel = xDist/fallTime;

【讨论】:

  • 我可能应该在完整的问题中问这个问题,你知道我如何将它与 Y 力一起使用。我已经用我的完整代码更新了这个问题。当 y 速度已知时,我试图计算 x 速度 (4)。当我不添加 Y 速度时,此代码可以正常工作。但是一旦我添加 Y 速度,它就没有达到目标。
  • 我认为你的答案应该有效,但由于某种原因它似乎没有。它没有正确达到所需的 x 值。感谢到目前为止的所有帮助。如果我不能尽快解决这个问题,我会接受这个答案。
  • 我建议查看en.wikipedia.org/wiki/Projectile_motion。这是非常基础的物理学。我从我对 10 年级物理的遥远记忆中得出了我的公式,该主题中的大多数(全部?)公式都使用了发射角度,我认为这是你试图得出的,至少是间接的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多