我是个新手,用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,重力为20 (height = initialvelocity^2/(2*gravity)
)时,高度将为1.6。如果这确实是我在游戏中看到的高度,我可以简单地转换公式,但我看到的高度大约是2.4米……
发布于 2017-12-24 13:57:02
你在正确的轨道上。我假设你知道苏瓦特方程。
我们的已知可以是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;
https://stackoverflow.com/questions/47953053
复制相似问题