Написание кода с помощью простой механики тире / слайда C# Unity2d

Я пытаюсь достичь простого рывка, похожего на 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;
            }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 435
1

Ответы 1

Будет ли Rigidbody вашего персонажа подвергаться воздействию огромного веса, трения или демпфирующей силы? Это довольно часто, если вы создаете Контроллер 2D-персонажей. Вы можете видеть это, потому что он принудительно перемещается вправо и немедленно останавливается, потому что противодействующие силы огромны, поэтому это похоже на телепортацию. Вызов AddRelativeForce выглядит правильным.

На чем стоит персонаж? Если вы измените его на вектор вверх, вы увидите, что персонаж отрывается от земли?

fionbio 17.12.2018 09:52

Сейчас они стоят на Платформа. Если я изменю GetKeyDown на GetKey, он будет работать так, как я хочу, но он постоянно дает силу и не останавливается при достижении maxSlideCount, но я хочу, чтобы он работал как одно нажатие = полный рывок, а не просто постоянная сила

Benjamin Zarb 17.12.2018 09:56

Вы захотите указать ForceMode.Impulse в качестве второго аргумента принудительного добавления.

fionbio 17.12.2018 10:00

Так что-то вроде этого? if (slideCount < maxSlideCount) { rb2d.AddRelativeForce (Vector2.right * 0.05f, ForceMode.Impulse);

Benjamin Zarb 17.12.2018 10:05

Хорошо, я добавил это и заставил его работать, но персонаж все еще телепортируется

Benjamin Zarb 17.12.2018 10:14

Если отбросить телепортацию на секунду, условная логика - if (g down && !sliding) {sliding=true} else { sliding = false }. Если g down = true постоянно удерживает нажатой клавишу, то sliding быстро переключится с истины на ложь.

fionbio 17.12.2018 10:33

Да, с этой логикой я должен нажимать клавишу несколько раз, чтобы получить значительный результат, что приводит к телепортации. Есть ли способ применить эту силу с течением времени?

Benjamin Zarb 17.12.2018 10:52

Зависит от того, как вы хотите, чтобы механика работала. Вы хотите, чтобы персонаж имел постоянную скорость во время скольжения? Что произойдет, если персонаж столкнется с другими объектами, должен ли персонаж замедлиться или остановиться? Самая простая версия - это импульсная сила с правильной величиной, как у вас - регулируйте множитель, пока один импульс не приведет вашего персонажа туда, куда вы хотите.

fionbio 17.12.2018 11:10

Я хочу, чтобы персонаж имел постоянную скорость во время слайда, где это заданное расстояние, и его нельзя отменить. Таким образом, вы всегда получаете один и тот же результат. Что касается столкновений и стен, я бы хотел, чтобы персонаж останавливался, когда он сталкивается с указанным объектом.

Benjamin Zarb 17.12.2018 11:33

Пример кода Rigidbody.velocity должен помочь (docs.unity3d.com/ScriptReference/Rigidbody-velocity.html)

fionbio 17.12.2018 11:38

Я еще немного разберусь в этом, кажется, не могу понять это правильно

Benjamin Zarb 17.12.2018 11:50

Другие вопросы по теме