单一更新功能中的两种移动方式

时间:2019-01-17 07:39:03

标签: c# unity3d

对不起标题,我不确定该怎么写。

我正在为一个我的大学课程设计一个小项目。在我们的输入部分中,我们应该能够在按住移动键的同时使精灵不断移动。最重要的是,如果同时按住Shift键和一个移动键,则只能让精灵移动指定的距离,这意味着玩家必须释放这些键并再次按下移动键。在我的脚本中,我不确定如何在不先移动后遗症的情况下发生这种单一移动。

为了持续运动,我有这个

if (Input.GetKey(KeyCode.W))
{
     tf.position += (Vector3.up * speed);
}
     else if (Input.GetKey(KeyCode.A))
{
     tf.position += (Vector3.left * speed);
}
     else if(Input.GetKey(KeyCode.S))
{
     tf.position += (Vector3.down * speed);
}
     else if(Input.GetKey(KeyCode.D))
{
     tf.position += (Vector3.right * speed);
}

我尝试“移动设定的距离”是这样的:

if (Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.W))
{
     tf.position += Vector3.up;
}
else if (Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.A))
{
     tf.position += Vector3.left;
}
else if (Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.S))
{
     tf.position += Vector3.down;
}
else if (Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.D))
{
     tf.position += Vector3.right;
}

我知道可以通过更好的方式来处理运动,但是我很好奇如何在没有更新代码的情况下让这两个代码同时存在而又不存在。

1 个答案:

答案 0 :(得分:0)

我很简单地将块包装在Input.GetKey(KeyCode.LefyShift)

if(!Input.GetKey(KeyCode.LeftShift)
{
    if (Input.GetKey(KeyCode.W))
    {
         tf.position += (Vector3.up * speed);
    }
    else if (Input.GetKey(KeyCode.A))
    {
         tf.position += (Vector3.left * speed);
    }
    else if(Input.GetKey(KeyCode.S))
    {
         tf.position += (Vector3.down * speed);
    }
    else if(Input.GetKey(KeyCode.D))
    {
         tf.position += (Vector3.right * speed);
    }
}
else
{
    if (Input.GetKeyDown(KeyCode.W))
    {
         tf.position += Vector3.up;
    }
    else if (Input.GetKeyDown(KeyCode.A))
    {
         tf.position += Vector3.left;
    }
    else if (Input.GetKeyDown(KeyCode.S))
    {
         tf.position += Vector3.down;
    }
    else if (Input.GetKeyDown(KeyCode.D))
    {
         tf.position += Vector3.right;
    }
}