c# - 跳跃高度与空格键时间的关系

标签 c# unity-game-engine

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

我有一个可以按空格键向下跳跃的角色。我希望当空格键按得更久时它能跳得更高,最大跳跃高度是正常跳跃高度的两倍。

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

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/

相关文章:

c# - C# ASP.NET 中的连接字符串问题

unity-game-engine - Unity中如何知道动画的结束坐标?

c# - 通过电子邮件发送日志文件?统一

unity-game-engine - 检测哪些 Tilemap 单元与 Unity 中的 Collider2D 发生碰撞

c# - 如何知道事件有什么样的参数

c# - 返回 linq 结果作为 2D 数组?

c# - 如何将 C++ dll printf 导入到 C# 文本框

c# - 在 C# 中显示带有 alpha channel 的 PNG

python - 如何通过套接字从 python 向 Unity 发送和接收 numpy 数组

unity-game-engine - 获取android unity3d中的drawcalls数量