- Home /
Multiple keys not detected at once
I'm making a 2D platformer using this code, and when the player holds down either the left or right arrow key, then presses the jump button, the jump doesn't work and only works once they release the key. The script doesn't seem to detect more than one key being pressed at once, why is this?
void Update () {
float xvel = GetComponent<Rigidbody2D>().velocity.x;
float yvel = GetComponent<Rigidbody2D>().velocity.y;
if (Input.GetKeyDown(KeyCode.UpArrow))
{
GetComponent<Rigidbody2D>().velocity = new Vector2(xvel, jumpHeight);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
GetComponent<Rigidbody2D>().velocity = new Vector2(-1*moveSpeed, yvel);
}
if (Input.GetKey(KeyCode.RightArrow))
{
GetComponent<Rigidbody2D>().velocity = new Vector2(moveSpeed, yvel);
Answer by TreyH · Oct 08, 2018 at 08:12 PM
When you manually set velocity like that, you effectively erase whatever physics were acting on your object. While you're accounting for that by only changing the velocity component that corresponds to your key presses, your logical priority here is:
RIGHT: counted above all else
LEFT: only counted when right isn't pressed
UP: only be counted when nothing else is pressed
You need to incorporate that jump height another way. I don't like changing velocity directly for exactly that reason, but we'll do that here since it's closest to your original setup and the journey is the destination:
// Cache your rigidbody. Either assign this in the inspector
// or do a GetComponent<> from Start or Awake.
//
public Rigidbody rigidbody;
void Update () {
float xvel = rigidbody.velocity.x;
float yvel = rigidbody.velocity.y;
if (Input.GetKeyDown(KeyCode.UpArrow))
{
yvel = jumpHeight;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
xvel = -moveSpeed;
}
if (Input.GetKey(KeyCode.RightArrow))
{
xvel = moveSpeed;
}
rigidbody.velocity = new Vector2(xvel, yvel);
}
Your answer
Follow this Question
Related Questions
Player stucken in the wall while jumping 2D 1 Answer
GetButtonDown not always firing 1 Answer
Jump 2D error 1 Answer
Using RayCasting to check for floor and ceiling? 0 Answers
Why do I double jump? This isn't supposed to happen... 2 Answers