同时按两个箭头键

时间:2018-02-11 20:57:52

标签: c# unity3d input arrow-keys

我有同时获得两个箭头键的问题,例如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;                                                                                                 //
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}

2 个答案:

答案 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;