当我两次调用Input.GetKeyDown时不起作用

时间:2018-10-11 04:25:48

标签: c# unity3d

我试图让多维数据集在我调用Input.GetKeyDown("space")时下降,并且当下降多维数据集时,生成第二个多维数据集,并在按下空格时再次下降,但是当我按下它时再次不起作用,这是我的代码

void Update () 
{
    if (Input.GetKeyDown("space"))
    {
        if (!ss)
        {
            shabi.useGravity = true;
            shabi.AddForce(0, 0, -100);
            ss = true;
        }
    }

    if (cube1.transform.position.y == y)
    {
        if (!singleExecution)
        {
            Rigidbody newCube = spawn();
            if (Input.GetKeyDown("space")) //THE PART THAT DOESN'T WORK
            {
                Debug.Log("sb");
                newCube.useGravity = true;
                newCube.AddForce(0, 0, -100);
            }
            y++;
            //cubeY += 2;
            singleExecution = true;
        }
    }
}

函数spawn()用于生成另一个多维数据集,而第二个Input.GetKeyDown不起作用,谢谢您回答我的问题

1 个答案:

答案 0 :(得分:4)

我认为问题实际上已经出在前一行:

if(cube1.transform.position.y == y)

由于第一个对象使用重力,所以一帧中的位置与y完全匹配的几率是多少?此外,即使两个值float相同也不能匹配,有关更多信息,请参见Math.Approximately

这几乎永远不会是真的,因此您的代码甚至无法到达Input部分。

现在您当然可以使用

if(Math.Approximately(cube1.transform.position.y, y)

试图仍然与精确的y值匹配,但是此值与自由落体匹配的几率仍然很小!

您应该使用定性比较,例如<=。您可以使用两个值之间的差值来使用更近似的值(在此示例中,当对象比预期的+-10cmy时,它会匹配):

if(cube1.transform.position.y - y <= 0.1f)

但是对于快速移动的物体(通常是自由下落的物体),最好检查一下它是否小于所需的高度:

if(cube1.transform.position.y <= y)

这显然取决于您的确切目的。