跳跃高度和重力统一

时间:2017-12-23 13:51:20

标签: unity3d

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

我使用:

让我的角色跳跃
if (Input.GetButton("Jump"))
moveDirection.y = jumpHeight;
...
moveDirection.y -= gravity * Time.deltaTime;

这也很好用,但由于引力会拉低我的角色,所以跳跃高度实际上并未达到。例如,jumpHeight为8会导致2.4米左右的跳跃。

我怎样才能更改我的代码,所以jumpHeight代表角色跳跃的高度,即使重力把他拉下来?基本上,跳跃高度为8,我希望我的玩家能够跳8米。

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

1 个答案:

答案 0 :(得分:0)

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

我们的知识可以是jumpheight(8)和timeToJumpApex(0.5f)< - 您可以将此更改为任何内容,但0.5f是一个良好的开端。

跳跃顶点的时间就像顾名思义的那样,是达到跳跃顶点所需的时间。

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

gravity = 2 * jumpheight / timeToJumpApex^2;

跳跃速度可以这样定义:

jumpVelocity = gravity * timeToJumpApex;

然后你可以这样做:

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