我正在使用此代码射击射弹以击中地面上的目标。
我在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
变量用于找到射弹轨迹峰值的距离
答案 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;