我有同时获得两个箭头键的问题,例如Up + Right让我的播放器移动到屏幕的一角,但我一次只能输入一个。 所以我必须检查每一种可能性。有什么办法吗? 这是我的代码。
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; //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
答案 0 :(得分:1)
在您的情况下,您应该删除else if
语句并将其放在if
语句中,这样您的代码必须遵循以下内容:
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);
所以在你的代码中:
if(Input.GetKey(KeyCode.RightArrow)){
physicsPlayer.velocity = new Vector2(1,1) * moveSpeed;
}
if(Input.GetKey(KeyCode.UpArrow)){
physicsPlayer.velocity = new Vector2(-1,1) * moveSpeed;
}
像上面那样。
Ps:它没有经过测试,但逻辑就在那里。希望它可以帮助你:)
答案 1 :(得分:0)
这是我对此代码的最终编辑。我必须使用此for item in objects_found:
pass
physicPlayer.velocity = new Vector2(-moveSpeed, physicPlayer.velocity.y);
内容
它仍然存在一些问题,但它确实有效。
谢谢。
physicPlayer.velocity = Vector2.left * moveSpeed;