Два типа движения в единственной функции обновления - PullRequest
0 голосов
/ 17 января 2019

Извините за название, я не знал, как это произнести.

Я работаю над небольшим проектом для одного из моих университетских классов. В нашем разделе ввода мы должны иметь возможность постоянно перемещать спрайт, пока нажата клавиша перемещения. Кроме того, мы должны иметь возможность перемещать спрайт только на заданное расстояние, если удерживать нажатой клавишу 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 голосов
/ 17 января 2019

Я бы посоветовал просто обернуть блоки в 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...