Как ограничить скорость объекта в Unity?
Столкнулся с постоянным увеличением скорости по оси Z, при попытке задать Constant Forse изменений не происходит.
public float forwardForse = 2000f;
public float sidewaysForse = 500f;
public float maxVelocity = 2000f;
void Update()
{
rb.AddForce(0, 0, forwardForse * Time.deltaTime);
if (Input.GetKey("d"))
{
rb.AddForce(sidewaysForse * Time.deltaTime, 0, 0);
}
if (Input.GetKey("a"))
{
rb.AddForce(-sidewaysForse * Time.deltaTime, 0, 0);
}
}
Ответы (4 шт):
так а чего еще ожидать если ты на каждом кадре делаешь AddForce ?
Ну можешь сразу после AddForce сразу сделать проверку на скорость. Вроде
if ( rb.velocity.x > maxVelocityX) {
rb.velocity = Vector3(maxVelocity, 0, 0);
}
Тебе необходимо следующее:
Проверить достигает ли твоя скорость предела. Это то что указывается в speed твоего Rigidbody. Найти эту скорость можно через RigidBody.velocity.magnitude
Соответственно теперь проверять является ли скорость больше максимальной? Если да то нормализовать скорость, и умножить на максимальную скорость. В таком варианте при любом движении физическая скорость не будет выше максимальной
if (_rigidBody.velocity.magnitude >= maxVelocity)
{
_rigidBody.velocity = _rigidBody.velocity.normalized * maxVelocity;
}
Столкнулся с такой же проблемой, помогло добавления сопротивления воздуха(в редакторе, в компоненте Rigidbody переменная Linear Drag или же просто Drag, смотря какая версия Unity). Подберите подходящие числа методом тыка.
Скорость увеличивается потому что ты применяешь AddForce в Update. Дело в том, что AddForce автоматически срабатывает в методе FixedUpdate. Получается, что у тебя AddForce срабатывает минимум дважды. Сперва в Update, потом к этой силе добавляется автоматическое срабатывание AddForce в FixedUpdate. Поэтому сила увеличивается. Так повторяется каждый цикл, поэтому сила будет всё время расти и скорость будет увеличиваться.
Кстати, если ты поставишь AddForce в FixedUpdate, будет то же самое. Сила будет добавляться — один раз, потому что ты её применяешь в ручную, второй раз автоматически. И скорость будет расти.
Можно задать ограничения на максимальную скорость, как писали выше. Это пригодится, если ты хочешь управлять скоростью, увеличивать её и уменьшать, но чтобы она не выходила за какой-то предел.
Если скорость меняться не будет, можно применить AddForce в Start. Тогда ты один раз задаёшь силу и она автоматически будет применяться каждый FixedUpdate. Сила будет постоянной и скорость тоже будет постоянной.