Нет смысла, чтобы блок if(jumpPressed)
был эксклюзивным с блоком if (jAxis > 0)
.Удалите else
до if (jumpPressed)
.
. Кроме того, вы должны инициализировать jumpValue
до 0f
, поскольку компилятор не может самостоятельно распознать, что jumpPressed
имеет значение true, только если jumpValue
set.
Вам не нужен блок else, чтобы установить jumpPressed
в false, потому что он уже будет ложным, если он находится в этом блоке.
В целом, это может выглядеть так:
void JumpHandler()
{
float jAxis = Input.GetAxis("Jump");
float jumpValue = 0f;
//if pressed
if (jAxis > 0)
{
bool isGrounded = CheckGrounded();
if (isGrounded)
{
jumpValue = jAxis;
if (!jumpPressed)
{
jumpPressed = true; //Pressed jump
}
}
else
{
jumpValue = 0;
}
}
if (jumpPressed)
{
rb.AddForce(
//Absolute value to prevent weird cases of negative jAxis
new Vector3(0, Mathf.Abs(jumpValue) * jumpForce, 0),
ForceMode.VelocityChange);
//jump key not pressed
jumpValue = 0;
jumpPressed = false;
}
}
Это производит вывод как это (с фиктивным методом для CheckGrounded
, который возвращает true
один раз):
![enter image description here](https://i.stack.imgur.com/ZrGf9.gif)