为什么我的if语句中的比较会影响输出

时间:2019-02-21 03:30:51

标签: c# unity3d

我正在尝试在我的游戏中添加跳转功能,而if语句的第三部分会影响跳转的高度,因此请确保您跳转到下面。就像我放2而不是1.001f一样,它会跳得很高,但是如果是1.1,它几乎不会跳。另外,1.001似乎根本不起作用。

public float jumpForce = 300f;

此代码没有跳转

if (Input.GetKey("space") && rb.position.y < 1.001f)
    {
        rb.AddForce(0, jumpForce * Time.deltaTime, 0, ForceMode.VelocityChange);
    }

这段代码有点跳跃

if (Input.GetKey("space") && rb.position.y < 1.1f)
    {
        rb.AddForce(0, jumpForce * Time.deltaTime, 0, ForceMode.VelocityChange);
    }

这段代码跳得很高

if (Input.GetKey("space") && rb.position.y < 2f)
    {
        rb.AddForce(0, jumpForce * Time.deltaTime, 0, ForceMode.VelocityChange);
    }

1 个答案:

答案 0 :(得分:0)

就像评论中提到的那样,您的阈值越高,在达到阈值高度之前执行该行的频率就越多=>施加力的频率就会越高。

为避免这种情况,您应该只执行一次跳转,例如代替GetKeyDown并添加一个固定的力,而不是像{p>那样使用Time.deltaTime

if(Input.GetKeyDown(KeyCode.Space) && rb.position.y < 1.001f)
{
    rb.AddForce(0, jumpForce, 0, ForceMode.VelocityChange);
}