Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同时按下2个按钮时,Unity 2D会跳得更大_C#_Unity3d - Fatal编程技术网

C# 同时按下2个按钮时,Unity 2D会跳得更大

C# 同时按下2个按钮时,Unity 2D会跳得更大,c#,unity3d,C#,Unity3d,我的角色在接地时要跳转的代码如下: if (Input.GetKeyDown("w") || Input.GetKeyDown("up") || Input.GetKeyDown("space")) { GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse); } 问题是,如果我同时按下3个按钮(w、up、

我的角色在接地时要跳转的代码如下:

if (Input.GetKeyDown("w") || Input.GetKeyDown("up") || Input.GetKeyDown("space"))
     {
         GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);            
     }

问题是,如果我同时按下3个按钮(w、up、space)中的一个以上,它会使跳跃比应该的要高得多。(这几乎就像给它施加了两倍的力)那么我怎么才能解决这个问题呢

我相信您可能发现了一个小问题。正如您在文档中所知道的,getkeydown被重置,除非您再次按下它,否则结果将为false,但是在跳转中,它只消耗第一个getkeydown,在您获得下一次更新时,即使您添加了力,它也可能仍然在地面上,从而处理另一个getkeydown。作为一种体验,请尝试以下方法:

bool jump = false;
if(Input.GetKeyDown("w"))
  jump = true;
if(Input.GetKeyDown("up"))
  jump = true;
if(Input.GetKeyDown("space"))
  jump = true;
if (jump)
 {
     GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);            
 }
bool jump=false;
if(Input.GetKeyDown(“w”))
跳跃=真;
if(Input.GetKeyDown(“up”))
跳跃=真;
if(Input.GetKeyDown(“空格”))
跳跃=真;
如果(跳转)
{
GetComponent().AddForce(新矢量2(0f,jumpForce),ForceMode2D.Pulse);
}

我想你必须检查一下他们目前是否在地面上。如果他们已经在跳了,那就再跳出来。否则,你可以添加一个你每秒只能跳一次的标志,也许?也许其他人有更好的答案。我在半空中时不会遇到问题。我只有在接地时同时按下一个以上的按钮才能得到它。(哈哈,很好的meme btw:P)好的,所以我用这段代码做了一些测试。当我在更新中有了输入部分和实际的跳跃力时,我仍然有同样的问题。现在,如果我在FixedUpdate中同时使用这两个键,它会起作用,因为我没有获得更大的跳跃,但有时一些按键不起作用,角色也不会跳跃。最后,我试着把输入放在Update上(这样我就不会错过任何按键)和FxedUpdate中的跳转力,以便更好地应用物理,但我仍然得到了更大的跳转。如果(input&!jump)在每个if子句中getkeydown只在Update中正常工作,这就是为什么FixedUpdate“吃掉”了你的一些输入。我建议你加上一个检查,看看当你跳的时候,物体上是否已经加了一个力。是的,但是你只能在地面跳的时候这样做,例如,如果(onGround&&noForce)跳!
bool jump = false;
if(Input.GetKeyDown("w"))
  jump = true;
if(Input.GetKeyDown("up"))
  jump = true;
if(Input.GetKeyDown("space"))
  jump = true;
if (jump)
 {
     GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);            
 }