Цикл
A for
не подходит для этого, потому что вы хотите только продвинуть счетчик, если прыгаете.и вам нужно выйти из цикла, когда пришло время для завершения кадра.Теоретически, вы можете сделать это с помощью цикла while
в Coroutine
, но это неоправданно сложно.
Лучшая альтернатива - просто сохранить счетчик в качестве поля класса и соответствующим образом обновить его, в соответствии ссостояние двойного прыжка.
Кроме того, поскольку оператор if выполняется в каждом кадре, перед двойным прыжком необходимо проверить, есть ли у вас еще воздушные прыжки.
Если вы хотитебыть в состоянии выполнить двойной прыжок после того, как вы просто выйдете с платформы, вы захотите установить счетчик прыжков на 0
в любое время, когда grounded
установлен на true
.
Объединение всех этих предложенийможет выглядеть так:
public class SimplePlatformController : MonoBehaviour
{
// ...
private int airJumpCount = 0; // Add this counter
// ...
// Update is called once per frame
void Update()
{
grounded = Physics2D.Linecast(
transform.position, groundCheck.position,
1 << LayerMask.NameToLayer("Ground"));
if (grounded) airJumpCount = 0; // reset the counter when grounded
if (Input.GetButtonDown("Jump") && grounded)
{
jump = true;
}
// Only enter the air jump block if we still have more air jumps
if ( Input.GetButtonDown("Jump") && !grounded && airJumpCount < 1)
{
airJumpCount++;
jump = true;
}
}
// ...
}