所以我的朋友和我正在制作一些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坐标应用相同的公式,但效果不佳。
非常感谢任何帮助。
答案 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