2015-04-10 2 views
1

у меня есть этот код для моего персонажа, чтобы прыгать, когда он заземлен:Unity 2D прыгать больше при нажатии 2 кнопки одновременно

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

проверить, если он заземлен с помощью следующего кода (так же, как платформер в Юнити 5 «Пример проектов стандартных активов»).

Physics2D.OverlapCircleAll(m_GroundCheck.position, k_GroundedRadius, m_WhatIsGround); 

Проблема заключается в том, что если я нажимаю более чем один из 3-х кнопок (ш, вверх, пространство), одновременно он делает скачок намного выше, чем это необходимо. (Это почти похоже на двойное усилие). Как я мог это исправить?

+0

http://www.quickmeme.com/img/b1/b16846514f96315a2db0501afb434fb5662b92679ee85364c51a3808e7389806.jpg – phpmeh

+0

Я думаю, что вы будете иметь, чтобы проверить, являются ли они в настоящее время на земля. Если они уже прыгают, то просто возвращайтесь. В противном случае вы могли бы добавить флаг, который можно прыгать раз в секунду, может быть? Может быть, у кого-то есть лучший ответ. – phpmeh

+0

У меня проблемы, когда я нахожусь в воздухе. Я получаю его только при нажатии нескольких кнопок одновременно, пока я все еще заземлен. (haha nice meme btw: P) – user2975038

ответ

1

Я считаю, что вы, возможно, обнаружили небольшой сбой. Как вы знаете по документации, getkeydown сбрасывается, и если вы не нажмете его снова, результат будет ложным, однако в прыжке он будет потреблять только первый 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);    
} 
+0

Хорошо, поэтому я сделал несколько тестов с этим кодом. Когда у меня есть как входная часть, так и фактическая сила перехода в Обновление, у меня все еще такая же проблема. Теперь, если у меня есть оба в FixedUpdate, это работает, потому что я не получаю больше прыжка, но иногда некоторые из клавишных не работают, и персонаж не будет прыгать. Так что, в конце концов, я попытался внести вклад в «Обновление» (чтобы я не пропустил ни одного нажатия клавиши) и силу перехода в FxedUpdate, чтобы физика работала лучше, но я все равно получаю большой прыжок. – user2975038

+1

if (input &&! Jump) в каждом из предложений if – phpmeh

+0

То же самое снова:/но хорошая точка – user2975038

Смежные вопросы