Unity 中的弹丸运动

Projectile Motion in Unity

所以我和我的朋友正在制作一些 2D 游戏,我们正在使用一些自定义角色控制器,所以我们没有使用 rigidbody2D。现在我们有了某种弹射器,它需要以抛射运动的方式弹射玩家。 我们已经为弹射器完成了它,它可以直接向上射击玩家 在检查器中,您可以决定您希望玩家跳跃多少单位以及达到最大高度需要多少单位。 所以这里是弹射玩家的弹射器代码。

float ejectInicialY = (jumpHeight - ( player.physics.gravity * Mathf.Pow(timeToReachMaxHeight, 2) / 2)) / timeToReachMaxHeight; float ejectVelocityY = ejectInicialY + player.physics.gravity * Time.deltaTime; player.physics.playerVelocity = new Vector2(ejectVelocityY, 0f);

我尝试对 X 坐标应用相同的公式,但效果不佳。

如有任何帮助,我们将不胜感激。

这归根结底是一道物理题。

您正在通过确定物体的加速度来计算当前速度。物体的加速度可以通过公式 a = F / m 由作用在物体上的合力 (F) 和物体的质量 (m) 确定。我强烈建议阅读 some explanations of projectile motion 并理解您正在使用的运动方程的含义。

垂直方向

对于垂直方向,跳跃过程中的垂直净力(假设没有空气阻力等)为player.physics.gravity。所以你应用你的运动公式假设加速度恒定 player.physics.gravity,你似乎已经完成了。

水平方向

由于重力通常不作用于水平方向,因此跳跃过程中的净水平力(假设没有空气阻力等)为0。所以你可以再次应用你的运动公式,但这次使用 0 作为你的加速度。通过这样做,您应该意识到 velocityX 不会改变(在没有净水平力的情况下)。因此X坐标可以通过(伪代码)newPositionX = startPositionX + Time.deltaTime * velocityX

来确定