Unity3D:如何在按1键然后同时按下另一个键时更改力?

时间:2017-07-27 09:56:09

标签: c# unity3d keypress

我想模拟一个简单的推力效果,例如(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并再次向左按\右。

我知道这可能是一个简单的代码问题

2 个答案:

答案 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
}

如果你同时左右握住,他们只需要相互取消而不需要任何检查。