Установите максимальную скорость горизонтального перемещения в Unity 2D без установки максимальной скорости - PullRequest
1 голос
/ 03 апреля 2019

Я искал в Интернете, чтобы помочь установить максимальную скорость моего персонажа - в основном, устанавливая верхний предел его горизонтальной скорости. Лучшее, что я нашел на данный момент, это:

rb.velocity = new Vector2(Mathf.Clamp(rb.velocity.x, -maxSpeed, maxSpeed), rb.velocity.y);

Основная проблема в этом, однако, заключается в том, что это препятствует тому, чтобы фактическая скорость персонажа проходила мимо любого установленного значения maxSpeed ​​(скажем, 4), что означает, что, если, скажем, его ударит движущийся объект, который будет толкать его так, чтобы его горизонтальная скорость превышала 4, всякий раз, когда производились вычисления движения, она сбрасывалась бы в 4. То, что я ищу, - это то, что не позволило бы персонажу ускориться самостоятельно за последние 4, но это все же позволило бы ему двигаться с внешней силой.

1 Ответ

0 голосов
/ 03 апреля 2019

Моя идея заключалась бы в том, чтобы зажимать только там, где вы хотите активно установить velocity, из-за пользовательского ввода и, если он еще не выше (из-за внешних сил).

что-то вроде

if(Mathf.Abs(rb.velocity.x) < maxSpeed)
{
    // calculate your new velocity according to user input
    float newVelX = XYZ;

    // than clamp it
    newVelX = Mathf.Clamp(newVelX, -maxSpeed, maxSpeed);

    // and finally asign the new vel
    rb.velocity = new Vector2(newVelX, rb.velocity.y);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...