我试图让多维数据集在我调用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
不起作用,谢谢您回答我的问题
答案 0 :(得分:4)
我认为问题实际上已经出在前一行:
if(cube1.transform.position.y == y)
由于第一个对象使用重力,所以一帧中的位置与y
完全匹配的几率是多少?此外,即使两个值float
相同也不能匹配,有关更多信息,请参见Math.Approximately
。
这几乎永远不会是真的,因此您的代码甚至无法到达Input
部分。
现在您当然可以使用
if(Math.Approximately(cube1.transform.position.y, y)
试图仍然与精确的y
值匹配,但是此值与自由落体匹配的几率仍然很小!
您应该使用定性比较,例如<=
。您可以使用两个值之间的差值来使用更近似的值(在此示例中,当对象比预期的+-10cm
少y
时,它会匹配):
if(cube1.transform.position.y - y <= 0.1f)
但是对于快速移动的物体(通常是自由下落的物体),最好检查一下它是否小于所需的高度:
if(cube1.transform.position.y <= y)
这显然取决于您的确切目的。