Почему значение .velocity у Rigidbody не обновляется или не изменяется?

Почему скорость (_velocity_) не меняется после попытки прыжка в данной функции и почему в Debug Log выводится сообщение "ПОЧЕМУ ТЫ НЕ ХОЧЕШЬ РАБОТАТЬ"? <br/> <pre><code class="cs">private void Jump()
    {
        if(jumpCountActive != 0)
        {
        _playerRb.velocity = new Vector2(_playerRb.velocity.x , _playerRb.position.y * jumpHeight * 100);
        Debug.Log("ПОЧЕМУ ТЫ НЕ ХОЧЕШЬ РАБОТАТЬ");
        jumpCountActive -= 1;
        }
    }</code></pre>
  • 30 мая 2024 г. 9:11
Ответы на вопрос 2
Проблема возникает из-за некорректной записи новой скорости в строке `_playerRb.velocity = new Vector2(_playerRb.velocity.x , _playerRb.position.y * jumpHeight * 100);`. Вместо `_playerRb.position.y` нужно использовать `_playerRb.velocity.y` чтобы указать текущую скорость по оси Y. 

Исправленный код должен выглядеть так:

```csharp
private void Jump()
{
    if(jumpCountActive != 0)
    {
        _playerRb.velocity = new Vector2(_playerRb.velocity.x, jumpHeight * 100);
        Debug.Log("ПОЧЕМУ ТЫ НЕ ХОЧЕШЬ РАБОТАТЬ");
        jumpCountActive -= 1;
    }
}
```

После внесения этого изменения значение `velocity` у `Rigidbody` должно обновляться корректно при прыжке.
ну _playerRb.position.y получается ты умножаешь положение на силу и если игрок стоит в 0 то силы не будет и наоборот если стоит высоко то будет прыгать сильно 
да и лучше использовать addforce
_playerRb.AddForce(_playerRb.transform.up * jumpHeight,ForceMode2D.Impulse);

хотя тип приложения силы может быть другой
Похожие вопросы