How to Make Enemy Attack When In Range of The Player?

So my game is a 2D top down movement game and my script does make my enemy attack but it constantly loops the attack animation because I obviously don’t know what EXACTLY to put code wise to make the enemy attack when in range of the player to do damage instead of letting him constantly loop. Also i seem to be getting an error when i get close to my enemy as of right now it says

NullReferenceException: Object reference not set to an instance of an object EnemyCombat.Attack () (at Assets/EnemyCombat.cs:36) EnemyCombat.Update () (at Assets/EnemyCombat.cs:25) Link

Also, Here is the EnemyCombat script

   enemy attausing System.Collections;
   using System.Collections.Generic;
   using UnityEngine;

   public class EnemyCombat : MonoBehaviour
   {
       public Animator animator;

       public Transform AttackPoint;

       public float attackRange = 0.5f;

       public LayerMask enemyLayers;

       public int attackDamage = 5;

       public float attackRate = 2f;
       float nextAttackTime = 0f;

       // Update is called once per frame
       void Update()
       {
           if (Time.time >= nextAttackTime)
           { 
               Attack();
               nextAttackTime = Time.time + 1f / attackRate; 
           }
       }

       void Attack()
       {
           animator.SetTrigger("Attack");
           Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(AttackPoint.position, attackRange, enemyLayers);
           foreach (Collider2D enemy in hitEnemies)
           {
               enemy.GetComponent<Enemy>().TakeDamage(attackDamage);
           }
       }

       void OnDrawGizmosSelected()
       {
           if (AttackPoint == null)
               return;

           Gizmos.DrawWireSphere(AttackPoint.position, attackRange);
       }
   }
enemy.GetComponent<Enemy>().TakeDamage(attackDamage);

What do you think is going to happen when some of the objects you got have no “Enemy” components on them?