Я пытаюсь достичь простого рывка, похожего на Megaman или недавний Hollow Knight, когда пользователь нажимает кнопку, и они толкаются вперед и не могут отменить.
У меня сейчас работает кое-что простое, но оно просто телепортирует игрока вперед, туда, где я ищу плавное движение. Я пробовал учебные пособия на YouTube и несколько раз выполнял поиск в Интернете, но не могу найти ничего, что работает.
Это мой код до сих пор
if (Input.GetKeyDown (KeyCode.G) && isSliding == false) {
slideCount += Time.deltaTime;
isSliding = true;
if (slideCount < maxSlideCount) {
rb2d.AddRelativeForce (Vector2.right * 100f);
}
else
slideCount = 0;
isSliding = false;
}





Будет ли Rigidbody вашего персонажа подвергаться воздействию огромного веса, трения или демпфирующей силы? Это довольно часто, если вы создаете Контроллер 2D-персонажей. Вы можете видеть это, потому что он принудительно перемещается вправо и немедленно останавливается, потому что противодействующие силы огромны, поэтому это похоже на телепортацию. Вызов AddRelativeForce выглядит правильным.
Сейчас они стоят на Платформа. Если я изменю GetKeyDown на GetKey, он будет работать так, как я хочу, но он постоянно дает силу и не останавливается при достижении maxSlideCount, но я хочу, чтобы он работал как одно нажатие = полный рывок, а не просто постоянная сила
Вы захотите указать ForceMode.Impulse в качестве второго аргумента принудительного добавления.
Так что-то вроде этого? if (slideCount < maxSlideCount) { rb2d.AddRelativeForce (Vector2.right * 0.05f, ForceMode.Impulse);
Хорошо, я добавил это и заставил его работать, но персонаж все еще телепортируется
Если отбросить телепортацию на секунду, условная логика - if (g down && !sliding) {sliding=true} else { sliding = false }. Если g down = true постоянно удерживает нажатой клавишу, то sliding быстро переключится с истины на ложь.
Да, с этой логикой я должен нажимать клавишу несколько раз, чтобы получить значительный результат, что приводит к телепортации. Есть ли способ применить эту силу с течением времени?
Зависит от того, как вы хотите, чтобы механика работала. Вы хотите, чтобы персонаж имел постоянную скорость во время скольжения? Что произойдет, если персонаж столкнется с другими объектами, должен ли персонаж замедлиться или остановиться? Самая простая версия - это импульсная сила с правильной величиной, как у вас - регулируйте множитель, пока один импульс не приведет вашего персонажа туда, куда вы хотите.
Я хочу, чтобы персонаж имел постоянную скорость во время слайда, где это заданное расстояние, и его нельзя отменить. Таким образом, вы всегда получаете один и тот же результат. Что касается столкновений и стен, я бы хотел, чтобы персонаж останавливался, когда он сталкивается с указанным объектом.
Пример кода Rigidbody.velocity должен помочь (docs.unity3d.com/ScriptReference/Rigidbody-velocity.html)
Я еще немного разберусь в этом, кажется, не могу понять это правильно
На чем стоит персонаж? Если вы измените его на вектор вверх, вы увидите, что персонаж отрывается от земли?