【问题标题】:Jump height and gravity in unity跳跃高度和重力统一
【发布时间】:2017-12-23 13:51:20
【问题描述】:

我是 Unity 新手,我使用 CharacterController.Move 来移动我的角色。在我的游戏世界中,1 个单位 = 1 米。 这很有效,例如速度:如果我使用 5 的速度,则角色的速度为 5m/s。

我让我的角色跳跃使用:

if (Input.GetButton("Jump"))
moveDirection.y = jumpHeight;
...
moveDirection.y -= gravity * Time.deltaTime;

这也很好用,但是由于重力将我的角色拉下,所以实际上并没有达到 jumpHeight。例如,jumpHeight 为 8 会导致某物体的跳跃高度约为 2.4 米。

如何更改我的代码,使 jumpHeight 代表角色将跳跃的高度,即使重力将他拉下也是如此?基本上,当 jumpHeight 为 8 时,我希望我的球员跳出 8 米。

根据物理学,初始速度为 8,高度为 1.6,重力为 20 (height = initialvelocity^2/(2*gravity))。如果这确实是我在游戏中看到的高度,我可以简单地转换公式,但我看到的高度约为 2.4 米......

【问题讨论】:

  • 你有没有想过使用vector3.slerp的一些解决方案?

标签: unity3d


【解决方案1】:

你在正确的轨道上。我假设你知道 SUVAT 方程。

我们的已知值可以是 jumpheight (8) 和 timeToJumpApex (0.5f)

Time to jump apex 顾名思义,就是击中跳跃顶点所用的时间。

我们现在需要求解剩余的变量,重力和跳跃速度。重力可以这样定义:

gravity = 2 * jumpheight / timeToJumpApex^2;

跳跃速度可以这样定义:

jumpVelocity = gravity * timeToJumpApex;

那么你可以这样做:

if (Input.GetButton("Jump"))
moveDirection.y = jumpVelocity;
...
moveDirection.y -= gravity * Time.deltaTime;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 2020-05-28
    • 2015-06-28
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多