Собственно в названии и заключается проблема. Код следующий:
private bool isGrounded = true;
private bool isAir = false;
private void Update()
{
if (isGrounded) State = CharState.Idle;
if (isGrounded && Input.GetButtonDown("Jump")) Jump();
//if (isAir && Input.GetButtonDown("Jump")) DoubleJump();
//if (isGrounded && Input.GetButtonDown("Jump + Jump")) DoubleJump();
}
private void Jump()
{
if (Input.GetButtonDown("Jump")) DoubleJump();
else { rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse); }
//rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
//isAir = true; isGrounded = false;
}
private void DoubleJump()
{
rigidbody.AddForce(2 * transform.up * jumpForce, ForceMode2D.Impulse);
//isAir = false;
//isGrounded = true;
}
Последняя попытка была такой, но так при активации метода Jump персонаж сразу попадает в DoubleJump хотя должно быть не так.
Я согласен с комментарием под вопросом о том, что это не очень правильная реализация и лучше делать стейт-машину. Это не очень сложно и рекомендую погуглить примеры простейших стейт-машин (благо их навалом). Однако, если вы всё-таки хотите использовать такой подход, то, пожалуйста, попробуйте использовать этот код:
private bool isGrounded = true;
private bool canDoubleJump = true;
private void Update()
{
if (Input.GetButtonDown("Jump"))//если нажата кнопка Jump
{
if (isGrounded)//проверяем, находится ли персонаж на земле
{
Jump();//если да, то прыгаем "первый" прыжок
}
else if (canDoubleJump)//если персонаж не приземлён и может прыгнуть ещё раз, то прыгаем "второй" прыжок
{
DoubleJump();
}
//если персонаж не приземлён и больше не может прыгать, то при нажатии кнопки Jump ничего не произойдёт
}
}
private void Jump()
{
isGrounded = false;//устанавливаем, что персонаж не приземлён
canDoubleJump = true;//устанавливаем, что персонаж может прыгнуть "второй" раз
rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}
private void DoubleJump()
{
canDoubleJump = false;//устанавливаем, что персонаж не может прыгнуть "второй" раз, пока не прыгнет "первый" раз
rigidbody.AddForce(2 * transform.up * jumpForce, ForceMode2D.Impulse);
}
//этот метод должен вызываться при приземлении персонажа
private void Landing()
{
isGrounded = true;//устанавливаем, что персонаж приземлён
canDoubleJump = false;//устанавливаем, что персонаж не может прыгнуть "второй" раз, пока не прыгнет "первый"
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как отображать картинки(массив байтов) в вьюшке(<img>)?
Имею эмулятор BlueStacksЦель: написать простого бота, который в окне эмулятора нажимает на определенные области экрана эмулируя тапы, а также...