我想模拟一个简单的推力效果,例如(Lunar Land)。当按下箭头键然后在按下相应的箭头键时向左/向右推,但是在保持按下的同时,我想向上推。
if (Input.GetKey(KeyCode.UpArrow))
{
thrust = (Vector3.up * thrustForce);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
thrust = (Vector3.left * thrustForce);
}
else if (Input.GetKey(KeyCode.RightArrow))
{
thrust = (Vector3.right * thrustForce);
}
else
{
thrust = (Vector3.zero);
}
这就是我的开始,然后开始添加多个" IF"仍然没有正确行动的陈述。基本上在下面,当我按下UP时,物体向上推,但是不会向左移动\向右,直到我放开UP并再次向左按\右。
我知道这可能是一个简单的代码问题
答案 0 :(得分:1)
这不起作用的原因是它只会执行其中一个语句,因为你有,否则就是。你需要像这样的普通IF:
bool keyHold = false;
if (Input.GetKey(KeyCode.UpArrow))
{
thrust = (Vector3.up * thrustForce);
keyHold = true;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
thrust = (Vector3.left * thrustForce);
keyHold = true;
}
if (Input.GetKey(KeyCode.RightArrow))
{
thrust = (Vector3.right * thrustForce);
keyHold = true;
}
if(!keyHold) {
thrust = (Vector3.zero);
}
答案 1 :(得分:0)
这是一个非常简单的修复方法。您的代码当前位于if
内的向上箭头,并且因为您使用else if
s,代码甚至不会尝试检查其他箭头键。如果你没有举起,那么它会检查左箭头,然后是右边等等,如果其中一个按键被按下并且跳过了所有内容,就会停止。
另外,因为你在推力上使用=
,所以ifs中的语句也会覆盖以前的东西,这样如果你进入所有ifs,只会应用最后到达的推力,覆盖以前的套装。
因此,您有两个小问题:else if
s并使用=
而不是添加推力。可能的修复方法如下:
thrust = Vector3.Zero; //Start with zero
if (Input.GetKey(KeyCode.UpArrow))
{
thrust += Vector3.up * thrustForce; //Add on up thrust
}
if (Input.GetKey(KeyCode.LeftArrow))
{
thrust += Vector3.left * thrustForce; //Add on left thrust
}
if (Input.GetKey(KeyCode.RightArrow))
{
thrust += Vector3.right * thrustForce; //Add on right thrust
}
如果你同时左右握住,他们只需要相互取消而不需要任何检查。