首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跳高与重力的统一性

跳高与重力的统一性
EN

Stack Overflow用户
提问于 2017-12-23 21:51:20
回答 1查看 2.7K关注 0票数 2

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

我使用以下命令使我的角色跳转:

代码语言:javascript
运行
复制
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米……

EN

回答 1

Stack Overflow用户

发布于 2017-12-24 13:57:02

你在正确的轨道上。我假设你知道苏瓦特方程。

我们的已知可以是jumpheight (8)和timeToJumpApex ( 0.5f ) <-您可以将其更改为任何值,但0.5F是一个很好的开始。

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

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

代码语言:javascript
运行
复制
gravity = 2 * jumpheight / timeToJumpApex^2;

跳跃速度可以这样定义:

代码语言:javascript
运行
复制
jumpVelocity = gravity * timeToJumpApex;

然后您可以执行以下操作:

代码语言:javascript
运行
复制
if (Input.GetButton("Jump"))
moveDirection.y = jumpVelocity;
...
moveDirection.y -= gravity * Time.deltaTime;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47953053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档