gpt4 book ai didi

c# - 相对于空格键时间的跳跃高度

转载 作者:行者123 更新时间:2023-11-30 21:38:54 25 4
gpt4 key购买 nike

以前有人问过这个问题,但没有一个答案能解决我的问题,因为问题总是略有不同。

我有一个在空格键上向下跳跃的角色。我希望它在空格键按下时间更长时跳得更高,最大跳跃高度是正常跳跃高度的两倍。

这是我到目前为止的想法:

void FixedUpdate () {

if (Input.GetKeyDown(KeyCode.Space) && myRB.velocity.y == 0)
{
timeHeld = 1;

}
if (Input.GetKey(KeyCode.Space) && myRB.velocity.y == 0)
{
myRB.AddForce(Vector3.up * 20,ForceMode2D.Impulse);
timeHeld += Time.deltaTime;
myRB.mass = myRB.mass - timeHeld/10;

}
if (Input.GetKeyUp(KeyCode.Space))
{
myRB.mass = 1;

}
}

由于跳跃必须发生在按键按下时(而不是按键向上),我无法增加跳跃时添加的力,因为力已经施加在按键上。因此,我正在考虑降低刚体的质量。

如果我一直按住空格键,上面的代码“有效”:角色跳跃(最小高度)、着陆、再次跳跃但现在更高了一点,等等。但这显然不是我想要的。

最佳答案

这可以通过制作跳跃发生的时间范围来轻松完成;在此时间范围内,您可以通过按住空格键来施加向上的力。一旦到达时间范围的末尾或按下按钮的末尾;你限制向上的速度直到角色落地。结束跳跃后让重力顺其自然。

至于编码部分,我建议您在跳转发生时开始一个 co routine。

这里有一些代码可以帮助您入门;

IEnumerator Jumper()
{
if (maxjumpduration!=jumpduration)
{
jumpduration = jumpduration + 0.1f;
yield return new WaitForSeconds(0.1f);
}
else
{
jumpduration = 0;
StopCoroutine(Jumper());
}
}

至于你也想要有规律的跳跃;制定另一个时间框架,确定按空格键是常规跳跃还是受控跳跃;在您仍在决定它是哪种跳跃的初始时间范围内;您执行跳跃的一小部分,直到得出结论,然后将其发送到正确的方法。

我为您添加了一些基础工作,但尝试自己完成代码;

{
private bool shortjump = false;
private bool checkphase = false;
private bool hitground = false;
private Rigidbody player = new Rigidbody();
private bool jumping = false;
Vector3 sharedjumpforce = new Vector3();
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Initialjump();
}
if (Input.GetKeyUp(KeyCode.Space))
{
if (jumping)
{
shortjump = true;
}
}
if (jumping)
{
if (hitground)
{
jumping = false;
}
}
}

void Initialjump()
{
if (jumping = false)
{
checkphase = true;
jumping = true;
player.AddForce(sharedjumpforce);
Invoke("Standardorcontrolledjump", 0.2f);
}
}
void Standardorcontrolledjump()
{
checkphase = false;
if (shortjump)
{

}
else
{

}
}

关于c# - 相对于空格键时间的跳跃高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45543159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com