Unity2D: перемещение игрока с помощью кнопок пользовательского интерфейса - плавная анимация - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть две кнопки пользовательского интерфейса, которые я использую для управления движением игрока (влево и вправо), вместо использования компонента сценария кнопки, я решил использовать компонент сценария запуска события; событие точки вниз, чтобы переместить моего игрока, и событие точки вверх, чтобы остановить движение моего игрока. Моя проблема: я создал анимацию ходьбы (в моем аниматоре), которая будет воспроизводиться, когда пользователь нажимает и удерживает левую или правую кнопку, анимация плавная (что мне нравится), но если игрок нажал на Однократное нажатие кнопки (вместо нажатия и удержания кнопки) анимация не воспроизводится, движение не движется или анимация слишком быстрая, а движение действительно короткое. Что я хочу сделать: я хочу сохранить движение игрока, но я также хочу плавную анимацию и движение игрока, когда пользователь нажимает один раз.

Это мой сценарий:

public bool movingLeft = false;
public bool movingRight = false;

public float speed = 2f;

public Vector3 moveDirectionLeft = Vector3.left;
public Vector3 moveDirectionRight = Vector3.right;


 void Start () {
    movingLeft = false;
    movingRight = false;

  }

 void Update () {
     if (movingLeft == true) {                      // LEFT BUTTON //
        WalkAnim.SetBool ("WalkLeft", true);// walk left
            transform.Translate (moveDirectionLeft * speed * Time.deltaTime);
     }  else if (movingLeft == false) {
           speed = 0;
           WalkAnim.SetBool ("WalkLeft", false); // goes back to idle
     }


     if (movingRight == true) {                         // RIGHT BUTTON //
        WalkAnim.SetBool ("WalkRight", true); // walks right
            transform.Translate (moveDirectionRight * speed * Time.deltaTime);
     }  else if (movingLeft == false) {
           speed = 0;
           WalkAnim.SetBool ("WalkRight", false); // goes back to idle
     }
 }


public void limitLD() { // UI Button Event trigger - pointUp
    movingLeft = false;
}

public void limitRD() { // UI Button Event trigger - pointUp
    movingRight = false;
}


public void MoveLeft() { // UI Button Event trigger - pointDown
        movingLeft = true;
        movingRight = false;
}

public void MoveRight() { // UI Button Event trigger - pointDown
        movingLeft = false;
        movingRight = true;
}

1 Ответ

0 голосов
/ 09 сентября 2018

Эта проблема возникает из-за ваших if...else утверждений. Например, если вы нажимаете кнопку Right, вызывается void MoveRight(). Он установил movingRight = true и movingLeft = false.

Итак, в вашей функции Update() сначала запускается else if (movingLeft == false), задайте скорость 0 и установите анимацию в режим ожидания. и второй if (movingRight == true) работает. Но поскольку функции speed = 0 и animation = idle и Update() вызывали каждый кадр, ничего не произошло.

Вы можете изменить свой скрипт на это:

public bool movingLeft = false;
public bool movingRight = false;

public float speed = 2f;

public Vector3 moveDirectionLeft = Vector3.left;
public Vector3 moveDirectionRight = Vector3.right;


void Start()
{
    movingLeft = false;
    movingRight = false;
}

void Update() 
{
    if (movingLeft == true)
    {                      // LEFT BUTTON //
       WalkAnim.SetBool("WalkLeft", true);// walk left
       transform.Translate(moveDirectionLeft * speed * Time.deltaTime);
    }
    else if (movingRight == true)
    {                         // RIGHT BUTTON //
       WalkAnim.SetBool("WalkRight", true); // walks right
       transform.Translate(moveDirectionRight * speed * Time.deltaTime);
    }
    else
    {
       WalkAnim.SetBool("WalkLeft", false);
       WalkAnim.SetBool("WalkRight", false);
    }
}

public void limitLD()
{ // UI Button Event trigger - pointUp
    movingLeft = false;
}

public void limitRD()
{ // UI Button Event trigger - pointUp
    movingRight = false;
}

public void MoveLeft()
{ // UI Button Event trigger - pointDown
    movingLeft = true;
    movingRight = false;
}

public void MoveRight()
{ // UI Button Event trigger - pointDown
    movingLeft = false;
    movingRight = true;
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...