Reputation: 29
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
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
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