Реализация кулдауна Unity Dash: методы и примеры кода

Под «перезарядкой Unity Dash» понимается реализация периода восстановления способности рывка в игре Unity. Способность рывка позволяет персонажу игрока быстро двигаться в определенном направлении. Чтобы игрок не мог постоянно спамить способностью «Рывок», обычно добавляется период восстановления, во время которого способность становится временно недоступной после каждого использования.

Вот несколько способов реализовать время восстановления тире в Unity, а также примеры кода:

  1. Метод сопрограммы:

    public class DashAbility : MonoBehaviour
    {
    public float dashCooldown = 3f;  // Cooldown duration in seconds
    private bool isDashing = false;
    private IEnumerator DashCooldown()
    {
        isDashing = true;
        // Perform dash logic here
        // ...
        yield return new WaitForSeconds(dashCooldown);
        isDashing = false;
    }
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && !isDashing)
        {
            StartCoroutine(DashCooldown());
        }
    }
    }
  2. Метод таймера:

    public class DashAbility : MonoBehaviour
    {
    public float dashCooldown = 3f;  // Cooldown duration in seconds
    private bool isDashing = false;
    private float cooldownTimer = 0f;
    private void Update()
    {
        if (!isDashing && cooldownTimer <= 0f)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                isDashing = true;
                // Perform dash logic here
                // ...
            }
        }
        if (isDashing)
        {
            // Continue dash logic here
            // ...
            // Check if dash duration has ended
            if (/* Dash duration condition */)
            {
                isDashing = false;
                cooldownTimer = dashCooldown;
            }
        }
        else if (cooldownTimer > 0f)
        {
            cooldownTimer -= Time.deltaTime;
        }
    }
    }
  3. Таймер с методом сопрограммы:

    public class DashAbility : MonoBehaviour
    {
    public float dashCooldown = 3f;  // Cooldown duration in seconds
    private bool isDashing = false;
    private float cooldownTimer = 0f;
    private IEnumerator StartCooldownTimer()
    {
        cooldownTimer = dashCooldown;
        while (cooldownTimer > 0f)
        {
            cooldownTimer -= Time.deltaTime;
            yield return null;
        }
        cooldownTimer = 0f;
    }
    private void Update()
    {
        if (!isDashing && cooldownTimer <= 0f)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                isDashing = true;
                // Perform dash logic here
                // ...
                StartCoroutine(StartCooldownTimer());
            }
        }
        if (isDashing)
        {
            // Continue dash logic here
            // ...
            // Check if dash duration has ended
            if (/* Dash duration condition */)
            {
                isDashing = false;
            }
        }
    }
    }