Игрок скользит когда нажимаю две кнопки одновременно

Делаю платформер на юнити 2022.3.8f1. Когда в игре я нажимаю влево и вправо одновременно, то игрок начинает скользить, а не останавливаться. За передвижение игрока по оси X отвечает эта строка кода:

rig.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, rig.velocity.y);

Пробовал дебагать саму функцию Input.GetAxis("Horizontal") и понял что дело в самой функции, а не в моём коде. Помогите сделать так чтобы при нажатии двух кнопок игрок останавливался как тогда когда ты ничего не нажимаешь, буду рад. Вот видео https://www.youtube.com/watch?v=0cro58rt-PQ


Ответы (1 шт):

Автор решения: Latiya Canemi

Данная проблема возникает по причине особенностей самого GetAxis. Насколько я понимаю, данный метод берет значение из GetAxisRaw если сам обнаруживает наличие ввода, а после добавляет его, умноженное или преобразованное неким образом, к своему возвращаемому значению. Когда же GetAxisRaw не находит значений ввода, то так же постепенно приводит свое значение к 0.

Таким образом, когда ты зажимаешь две клавиши, ты делаешь это не в абсолютно одинаковое время, и внутреннее значение GetAxisRaw успевает сместиться в какую-то из сторон, а после замирает, так как клавиши ещё нажаты, то есть ввод есть, но их общее значение равно нулю, значит смещение не происходит.

Чтобы избежать этой проблемы, можно самостоятельно обрабатывать GetAxisRaw, это, кажется, наиболее простой путь. Нужно будет самостоятельно реализовать плавное изменение скорости, но в остальном, данный способ работает.

→ Ссылка