Moein
Moein

Reputation: 29

Press two arrow key at same time

I have problem with getting two arrow key at same time, for example Up+Right for my player to move to the corner of screen, but I can have only one input at time. So I have to check every possibility. Is there any way around? here is my code.

void Movement()
{   

    // Input user, arrow keys for move left,right,up and down/////////////////////////////
    if (Input.GetKey(KeyCode.LeftArrow) && transform.position.x >= -moveRangeX)         //
        physicPlayer.velocity = Vector2.left * moveSpeed;                               //
    else if (Input.GetKey(KeyCode.RightArrow) && transform.position.x <= moveRangeX)    //
        physicPlayer.velocity = Vector2.right * moveSpeed;                              //
    else if (Input.GetKey(KeyCode.UpArrow) && transform.position.y <= moveRangeY)       //
        physicPlayer.velocity = Vector2.up * moveSpeed;                                 //
    else if (Input.GetKey(KeyCode.DownArrow) && transform.position.y >= -moveRangeY)    //
        physicPlayer.velocity = Vector2.down * moveSpeed;                               //
    else                                                                                //
        physicPlayer.velocity = Vector2.zero;                                           //
    //////////////////////////////////////////////////////////////////////////////////////


    // For multiplay input user for example when user press Up+Right arrow keys.//////////////////////////////////////////////////////////////////////////////////
    if (Input.GetKey(KeyCode.RightArrow) && Input.GetKey(KeyCode.UpArrow) && transform.position.x <= moveRangeX && transform.position.y <= moveRangeY)          //
        physicPlayer.velocity = new Vector2(1, 1) * moveSpeed;                                                                                                  //
    else if (Input.GetKey(KeyCode.RightArrow) && Input.GetKey(KeyCode.DownArrow) && transform.position.x <= moveRangeX && transform.position.y >= -moveRangeY)  //
        physicPlayer.velocity = new Vector2(1, -1) * moveSpeed;                                                                                                 //
    else if (Input.GetKey(KeyCode.LeftArrow) && Input.GetKey(KeyCode.DownArrow) && transform.position.x >= -moveRangeX && transform.position.y >= -moveRangeY)  //
        physicPlayer.velocity = new Vector2(-1, -1) * moveSpeed;                                                                                                //
    else if (Input.GetKey(KeyCode.LeftArrow) && Input.GetKey(KeyCode.UpArrow) && transform.position.x >= -moveRangeX && transform.position.y <= moveRangeY)     //
        physicPlayer.velocity = new Vector2(-1, 1) * moveSpeed;                                                                                                 //
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}

Upvotes: 1

Views: 1337

Answers (2)

Moein
Moein

Reputation: 29

Here is my final edit for this code. I must use physicPlayer.velocity = new Vector2(-moveSpeed, physicPlayer.velocity.y); insted of this code physicPlayer.velocity = Vector2.left * moveSpeed;

It still got some problems but it works.

Thank you.

    void Update()
{   
    Movement();
}

void Movement()
{

    physicPlayer.velocity = Vector2.zero;

    if (Input.GetKey(KeyCode.LeftArrow) && transform.position.x >= -moveRangeX)
        physicPlayer.velocity = new Vector2(-moveSpeed, physicPlayer.velocity.y);

    if (Input.GetKey(KeyCode.RightArrow) && transform.position.x <= moveRangeX)
        physicPlayer.velocity = new Vector2(moveSpeed, physicPlayer.velocity.y);

    if (Input.GetKey(KeyCode.UpArrow) && transform.position.y <= moveRangeY)
        physicPlayer.velocity = new Vector2(physicPlayer.velocity.x, moveSpeed);

    if (Input.GetKey(KeyCode.DownArrow) && transform.position.y >= -moveRangeY)
        physicPlayer.velocity = new Vector2(physicPlayer.velocity.x, -moveSpeed);

}

Upvotes: 0

NoobProgrammer
NoobProgrammer

Reputation: 488

In your case you should remove the else if statement and put it on if statement only so your code must follow something like this :

Vector3 totalMovement = Vector3.zero;

if (Input.GetKey(KeyCode.W))
{
    totalMovement += transform.forward;
}
if (Input.GetKey(KeyCode.A))
{
    totalMovement -= transform.right;
}
// To ensure same speed on the diagonal, we ensure its magnitude here instead of earlier
player.MovePosition(transform.position + totalMovement.normalized * speed * Time.deltaTime);

So in your code :

if(Input.GetKey(KeyCode.RightArrow)){
   physicsPlayer.velocity = new Vector2(1,1) * moveSpeed;
}

if(Input.GetKey(KeyCode.UpArrow)){
    physicsPlayer.velocity = new Vector2(-1,1) * moveSpeed;
}

Something like that above.

Ps: It's untested but the logic is there . Hope it helps you :)

Upvotes: 1

Related Questions