Неправильное движение игрока в Unity по горизонтали

Рейтинг: 0Ответов: 1Опубликовано: 15.05.2023

Игрок не движется по горизонтали. Точнее, движется, но беспорядочно. У меня тут пока только управление по вертикали, то есть 3 позиции. Центр (0), верх (3.15) и вниз (-3.15). Я пытался сделать так, чтобы объект автоматически без нажатия на каких-либо клавиш двигался на право с определенной скоростью, не мешая вертикальному управлению, но он как-то очень быстро двигается вперед и возвращается в исходное положение. Может знаете, в чем проблема?

private Vector2 targetPos;
public float Increment;
public float speed;
public float maxHeight;
public float minHeight;

private void Update()
{
    transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
    if ((Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow)) && transform.position.y < maxHeight)
    {

        targetPos = new Vector2(transform.position.x, transform.position.y + Increment);
    }
    else if ((Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.DownArrow)) && transform.position.y > minHeight)
    {

        targetPos = new Vector2(transform.position.x, transform.position.y - Increment);
    }
}

Это в Unity:

(Increment = 3.15,
speed = 40 (скорость движение по вертикали),
maxHeight = 3.15,
minHeight -3.15. )

Ответы

▲ 0

например убрать private Vector2 targetPos; в Update()

transform.position = Vector2.MoveTowards выполнять ПОСЛЕ проверки на нажатия кнопок.

также MoveTowards будет вызываться каждый кадр. И соответственно перемещать персонажа на неверную позицию. Рекомендую проверять было ли вообще хоть какое нажатие и только потом двигать