i tried to make my soldier attack enemy when they close enough, but they only attack for one or twice then stopped forever.

void Update()

{

    if(CurrentHealth <= 0)
    {
        Destroy(this.gameObject);
    }
    damage = gamemanager.allydamage;
    armor = gamemanager.allyarmor;

    FindClosestEnemy();

    if (closestEnemy != null && Vector2.Distance(closestEnemy.transform.position, this.gameObject.transform.position) <= fightDistance)
    {
            Vector2 newPos = closestEnemy.transform.position;
            this.gameObject.transform.position = Vector2.MoveTowards(this.transform.position, newPos, Time.deltaTime);
    }
    else
    {
            Vector2 newPos = player.transform.position;
            this.gameObject.transform.position = Vector2.MoveTowards(this.transform.position, newPos, Time.deltaTime);
    }

    if(Vector2.Distance (closestEnemy.transform.position ,this.gameObject .transform .position )<= attackRadius && Time.time >= nextAttackTime)
    {

            this.GetComponent<Animator>().SetTrigger("attacking");

            closestEnemy.GetComponent<enemySoldier>().CurrentHealth -= (damage - closestEnemy.GetComponent<enemySoldier>().armor);

            nextAttackTime += Time.time;
    }

}

public void FindClosestEnemy()

{
    float distanceToClosesetEnemy = Mathf.Infinity;
    
    enemySoldier[] allEnemies = FindObjectsOfType<enemySoldier>();

    foreach(enemySoldier currentEnemy in allEnemies)
    {
        float distanceBetweenThisAndEnemy = Vector2.Distance(currentEnemy.transform.position, this.gameObject.transform.position);
        if(distanceBetweenThisAndEnemy <distanceToClosesetEnemy)
        {
            distanceToClosesetEnemy = distanceBetweenThisAndEnemy;
            closestEnemy = currentEnemy;
        }
    }
}

nextAttackTime += Time.time;

After the first attack it won’t be a next one any time soon. Do it like this instead…

nextAttackTime = Time.time+10.0f; //next attack in 10s