Barra de Stamina con bug

Tengo este código el cual es funcional, lo conecte a otro script en el cual hago la resta. Es una estamina para sistema de combate, lo básico, atacas y pierdes estaminas, descansas y se recarga, el detalle es que si te pones a atacar cuando esta se esta recargando puedes lograr atacar indefinidamente hasta que el glitch se detenga. Quisiera algún consejo para mejorar mi código. Muchas gracias de antemano.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class stamina : MonoBehaviour {
public int startingStamina = 70;
public int currentStamina;
public Slider StaminaSlider;

public int multiplier = 1;
public int attackStamina = 10;
public float beforeUP = 1;
public float waitUP = 5;

bool start = false;

float percent = 0.7f;

void Awake()
{
    currentStamina = startingStamina;

    if(StaminaSlider == null)
    {
        StaminaSlider = GameObject.FindGameObjectWithTag("Stamina").GetComponent<Slider>();
    }
}

void LateUpdate()
{
    //timer += Time.deltaTime;

    if (currentStamina <= startingStamina*percent)
    {
        start = true;
        if (start)
        {
            StartCoroutine(StaminaRestore());
        }
    }
}

public void DownStamina(int amount)
{
    currentStamina -= amount;
    StaminaSlider.value = currentStamina;
 }

public void UpStamina(int amount)
{
    currentStamina += amount;
    StaminaSlider.value = currentStamina;
}

IEnumerator StaminaRestore()
{
    yield return new WaitForSeconds(waitUP);
    
        if (currentStamina < startingStamina)
        {
            UpStamina(1 * multiplier);
            yield return new WaitForSeconds(beforeUP);

    }
    else
    {
        start = false;
    }
    
}

}

Listo, ya la repare :slight_smile:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class stamina : MonoBehaviour {
public int startingStamina = 70;
public int currentStamina;
public Slider StaminaSlider;

public int multiplier = 1;
public int attackStamina = 10;
public float waitUP = 2;

void Awake()
{
    currentStamina = startingStamina;

    if(StaminaSlider == null)
    {
        StaminaSlider = GameObject.FindGameObjectWithTag("Stamina").GetComponent<Slider>();
    }
}

void LateUpdate()
{

    if (currentStamina <= startingStamina)
    {
        StartCoroutine(StaminaRestore());
    }
}

public void DownStamina(int amount)
{
    currentStamina -= amount;
    StaminaSlider.value = currentStamina;
    StopAllCoroutines();
 }

public void UpStamina(int amount)
{
        currentStamina += amount;
        StaminaSlider.value = currentStamina;
}

IEnumerator StaminaRestore()
{
    yield return new WaitForSeconds(waitUP);
    if (currentStamina < startingStamina)
    {
        UpStamina(1 * multiplier);
    }
    
}

}