Я обновляю скорость персонажа с помощью 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);
}
Код: Выделить всё
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
Мобильная версия