Помогите со скриптом атаки для врага 2d

Есть скрипт противника, и его радиус атаки написан через OnTriggerStay2D, но он работает не коректно, урон проходит 2 раза. Я хочу написать его через Collider2D[] enemies = Physics2D.OverlapCircleAll как у игрока, но из за того что я новичок и пока не понимаю что да как, у меня не получается это сделать. Подскажите как лучше написать скрипт чтобы урон проходил адекватно а не через два коллайдера?

Вот скрипт врага

public class Enemy : MonoBehaviour
{
    private float timeBtwAttack;
    public float startTimeBtwAttack;

    public int health;
    public float speed;
    public int damage;
    private float stopTime;
    public float startStopTime;
    public float normalSpeed;
    private Player player;
    private Animator anim;

    private bool _isPlayerNear;

    private void Start()
    {
        anim = GetComponent<Animator>();
        player = FindObjectOfType<Player>();
        normalSpeed = speed;

        _isPlayerNear = false;
    }
    private void Update()
    {
        if(stopTime <= 0)
        {
            speed = normalSpeed;
        }
        else
        {
            speed = 0;
            stopTime -= Time.deltaTime;
        }
        if(health <= 0)
        {
            Destroy(gameObject);
        }
        if(player.transform.position.x > transform.position.x)
        {
            transform.eulerAngles = new Vector3(0, 180, 0);
        }
        else
        {
            transform.eulerAngles = new Vector3(0, 0, 0);
        }
        transform.position = Vector2.MoveTowards(transform.position, player.transform.position, speed * Time.deltaTime);
        
        

    }
    public void TakeDamage(int damage)
    {
        stopTime = startStopTime;
        health -= damage;
    }

    public void OnTriggerStay2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            if (timeBtwAttack <= 0)
            {
                anim.SetTrigger("enemyAttack");
            }
            else
            {
                timeBtwAttack -= Time.deltaTime;
            }
            _isPlayerNear = true;
        }
    }

    public void OnTriggerExit2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            _isPlayerNear = false; 
        }
    }

    public void OnEnemyAttack()
    {
        if (_isPlayerNear)
        {
            player.health -= damage;
        }
        timeBtwAttack = startTimeBtwAttack;
    }

}

Вот скрипт атаки игрока

public class PlayerAttack : MonoBehaviour
{
    private float timeBtwAttack;
    public float startTimeBtwAttack;

    public Transform attackPos;
    public LayerMask enemy;
    public float attackRange;
    public int damage;
    public Animator anim;

    private void Update()
    {   
        if(timeBtwAttack <= 0)
        {
            if (Input.GetMouseButton(0))
            {
                anim.SetTrigger("attack");
               
                timeBtwAttack = startTimeBtwAttack;
            }
            
        }
        else
        {
            timeBtwAttack -= Time.deltaTime;
        }
    }
    public void OnAttack()
    {
        Collider2D[] enemies = Physics2D.OverlapCircleAll(attackPos.position, attackRange, enemy);
        for (int i = 0; i < enemies.Length; i++)
        {
            enemies[i].GetComponent<Enemy>().TakeDamage(damage);
        }
        for (int i = 0; i < enemies.Length; i++)
        {
            Debug.Log(enemies[i]);
        }

    }
    
    
    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(attackPos.position, attackRange);
    }

}

Так вот здесь разве не то-же самое обсуждалось?

Не, не. Я понял почему наносится двойной урон. Из-за второго коллайдера, но без него враг не атакует, а с ним урон не правильный. Я хотел бы переделать его как в коде игрока, но не понимаю как это сделать

Или поместить один из колайдеров в другой слой, или убрать дубликаты из списка.

Возможно как-то так сработает

using System.Linq;

...

enemies = enemies.Distinct().ToArray();