Как ограничить скорость в Unity 3D с помощью AddForce с ForceMode.VelocityChangeC#

Место общения программистов C#
Ответить
Anonymous
 Как ограничить скорость в Unity 3D с помощью AddForce с ForceMode.VelocityChange

Сообщение Anonymous »

Я работаю над контроллером игрока, и у меня возникли проблемы с ограничением скорости персонажа. Похоже, что персонаж ускоряется бесконечно.
Я обновляю скорость персонажа с помощью rb.AddForce(movement * motionSpeed, ForceMode.VelocityChange), где motion — это нормализованный вектор Vector3 (со значениями только для x и z), а motionSpeed — общедоступное число с плавающей запятой, дающее желаемую скорость движения. Я понимаю, что было бы просто ограничить скорость персонажа, установив ее напрямую, но у меня сложилось впечатление, что установка rb.velocity напрямую — плохая практика (в чем я не совсем уверен).
Моя фиксированная функция обновления:

Код: Выделить всё

private void FixedUpdate()
{
Vector3 movement = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
movement.Normalize();
rb.AddForce(movement * movementForce, ForceMode.VelocityChange);
}
Я попробовал добавить условный оператор, проверяющий, превышает ли скорость желаемый максимум, и, если это правда, добавляющий силу в противоположном направлении. Это приводит к заиканию. Скорость персонажа сбрасывается до 0, и ему снова приходится ускоряться.

Код: Выделить всё

    Vector3 currMovement = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
float currMagnitude = currMovement.magnitude;
if (currMagnitude > movementSpeed) {
rb.AddForce(currMovement * (-1 * movementSpeed / currMagnitude), ForceMode.VelocityChange);
}
Будем очень признательны за любую помощь?
TL;DR

[*]Как ограничить скорость при использовании rb.AddForce(movement, ForceMode.VelocityChange)?
[*]Нужно ли вообще использовать rb.AddForce или можно напрямую установить rb.velocity?
/>

Подробнее здесь: https://stackoverflow.com/questions/653 ... citychange
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»