以前曾有人问过这个问题,但没有一个答案能解决我的问题,因为问题总是略有不同。
我有一个可以按空格键向下跳跃的角色。我希望当空格键按得更久时它能跳得更高,最大跳跃高度是正常跳跃高度的两倍。
这是我到目前为止的想法:
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 例程。
这里有一些代码可以帮助您入门;
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/