团结中的弹丸运动

时间:2015-09-06 16:58:02

标签: unity3d physics

所以我的朋友和我正在制作一些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坐标应用相同的公式,但效果不佳。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这最终是一个物理问题。

您正在通过确定物体的加速度来计算当前速度。可以通过公式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

来确定