Perché i seguenti codici non permettono che il player prenda danno dall' attacco dell enemy nonostante esso si trovi all' interno della sfera di attacco dell' enemy?"using UnityEngine;
using UnityEngine.AI;

public class ChaseEnemy : MonoBehaviour
{
    public Transform player;                // Riferimento al Transform del giocatore
    private NavMeshAgent agent;             // Riferimento al NavMeshAgent del nemico
    private SpriteRenderer spriteRenderer;
    public Animator animator;

    public Transform attackPoint;           // Punto centrale per l'area d'attacco
    public float attackRange = 2f;          // Raggio dell'area d'attacco
    public LayerMask playerLayers;          // Layer del giocatore

    public float chaseRange = 10f;          // Distanza massima di inseguimento
    public float attackCooldown = 1.5f;     // Tempo di attesa tra gli attacchi
    public int attackDamage = 10;           // Danno inflitto con l'attacco

    private float attackCooldownTimer = 0f; // Timer per gestire il cooldown dell'attacco
    private bool isAttacking = false;       // Flag per indicare se il nemico sta attaccando

    private Vector3 attackPointOffset;      // Offset originale dell'attackPoint rispetto al nemico

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        spriteRenderer = GetComponent<SpriteRenderer>();
        animator = GetComponent<Animator>();

        if (player == null)
        {
            player = GameObject.FindGameObjectWithTag("Player").transform;
        }
        agent.acceleration = 50f;       // Aumenta l'accelerazione

        // Calcola l'offset iniziale dell'attackPoint
        attackPointOffset = attackPoint.localPosition;
    }

    void Update()
    {
        float distance = Vector3.Distance(transform.position, player.position);

        // Se il player è entro la distanza di inseguimento
        if (distance <= chaseRange)
        {
            // Se è fuori dalla distanza di attacco, continua a inseguire
            if (distance > attackRange)
            {
                agent.SetDestination(player.position);
                animator.SetBool("running", true);

                if (isAttacking)
                {
                    isAttacking = false;
                    animator.ResetTrigger("attack");
                }
            }
            // Se è entro la distanza di attacco, fermati e attacca
            else
            {
                agent.ResetPath();  // Ferma il nemico
                animator.SetBool("running", false);

                if (attackCooldownTimer <= 0f && !isAttacking)
                {
                    AttackPlayer();
                }
            }

            // Aggiorna il flip dello sprite e l'attackPoint
            FlipSprite();
        }
        else
        {
            // Se il player è fuori dal raggio d'azione, resetta il percorso
            agent.ResetPath();
            animator.SetBool("running", false);

            if (isAttacking)
            {
                isAttacking = false;
                animator.ResetTrigger("attack");
            }
        }

        // Gestione del cooldown
        if (attackCooldownTimer > 0f)
        {
            attackCooldownTimer -= Time.deltaTime;
        }
    }

    void AttackPlayer()
    {
        // Imposta il flag di attacco
        isAttacking = true;

        // Imposta il timer di cooldown
        attackCooldownTimer = attackCooldown;

        // Attiva l'animazione di attacco
        animator.SetTrigger("attack");

        // Rileva i giocatori nell'area d'attacco
        Collider[] hitPlayers = Physics.OverlapSphere(attackPoint.position, attackRange, playerLayers);

        // Applica danno al giocatore
        foreach (Collider player in hitPlayers)
        {
            playerHealth playerHealth = player.GetComponent<playerHealth>();
            if (playerHealth != null)
            {
                player.GetComponent<playerHealth>().takeDamage(attackDamage);
                Debug.Log("Il nemico ha inflitto " + attackDamage + " danni al giocatore.");
            }
        }

        // Reset del flag dopo il cooldown
        Invoke("ResetAttack", attackCooldown);
    }

    void ResetAttack()
    {
        isAttacking = false;
    }

    void FlipSprite()
    {
        // Controlla la direzione in cui sta andando l'agente
        if (agent.velocity.x < -0.1f)
        {
            // Muove a sinistra: flippa lo sprite e l'attackPoint
            spriteRenderer.flipX = false;
            attackPoint.localPosition = new Vector3(-Mathf.Abs(attackPointOffset.x), attackPointOffset.y, attackPointOffset.z);
        }
        else if (agent.velocity.x > 0.1f)
        {
            // Muove a destra: non flippare
            spriteRenderer.flipX = true;
            attackPoint.localPosition = new Vector3(Mathf.Abs(attackPointOffset.x), attackPointOffset.y, attackPointOffset.z);
        }
    }

    void OnDrawGizmosSelected()
    {
        if (attackPoint == null)
        {
            return;
        }

        // Disegna la sfera che rappresenta l'area d'attacco
        Gizmos.DrawWireSphere(attackPoint.position, attackRange);
    }
}" "using UnityEngine;

public class playerHealth : MonoBehaviour
{
    public Animator animator;
    public int maxHealth = 300;
    int currentHealth;

    void Start()
    {
        currentHealth = maxHealth;
    }

    public void takeDamage(int damage)
    {
        currentHealth -= damage;
        animator.SetTrigger("Hurt");
        if (currentHealth <= 0)
        {
            Die();
        }
    }

    void Die()
    {
        animator.SetBool("IsDead", true);
        // Disabilitare il BoxCollider
        GetComponent<Collider>().enabled = false;
        // Disabilitare il NavMeshAgent se presente
        UnityEngine.AI.NavMeshAgent agent = GetComponent<UnityEngine.AI.NavMeshAgent>();
        if (agent != null)
        {
            agent.enabled = false;
        }
        // Disabilitare lo script
        this.enabled = false;
    }
}"