RigidBody2D弹丸用于目标计算

时间:2018-01-30 17:31:55

标签: unity3d vector unity5 projectile

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

我在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变量用于找到射弹轨迹峰值的距离

1 个答案:

答案 0 :(得分:1)

从记忆中

dist =(a * t 2 )/ 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;