Multiple hotboxes are activated

I am a beginner to Unity and have many questions! In my game when I move at a diagonal angle it activates multiple hit boxes. How do I stop this?

I have a 2d top down game. I can move around and attack just fine; when I’m moving left the left attack animation plays when I attack. But, I have a system when I attack, say, I’m facing up, the up hit box is activated and then deactivated when I stop moving. But the problem is that when I move at an angle, all of the hotboxes become active.

Below is an image of what happens:

Sure! Here it is:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public enum PlayerState
{
    walk,
    attack,
    interact
}

public class PlayerMovement : MonoBehaviour
{
    public PlayerState currentState;
    public float moveSpeed;
    public Rigidbody2D rb;
    public Animator anim;
    private Vector2 moveDirection;
    private Vector2 lastMoveDirection;

    


    void Start()
    {
        currentState = PlayerState.walk;

        // anim = GetComponent<Animator>();
        // rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        ProcessInputs();
    }

    void ProcessInputs()
    {
        // Gets directional input

        float moveX = Input.GetAxisRaw("Horizontal");
        float moveY = Input.GetAxisRaw("Vertical");

        // Sets the lastMoveDirection to moveDirection when movement stops

        if((moveX == 0 && moveY == 0) && moveDirection.x != 0 || moveDirection.y != 0)
            {
                lastMoveDirection = moveDirection;
            }

        // Checks if the "attack" button is pressed (space) and starts the coroutine if so

        if(Input.GetButtonDown("attack") && currentState != PlayerState.attack)
        {
            StartCoroutine(AttackCo());
        }

            // Moves and animates the character if the currentState is walking

            else if(currentState == PlayerState.walk)
            {
                Move();
                Animate();
            }


// Sets "isMoving" to be True or False

            if(moveX != 0 || moveY != 0)
        {
            anim.SetBool("isMoving", true);
        }

            else
            {
                anim.SetBool("isMoving", false);
            }

        moveDirection = new Vector2(moveX, moveY).normalized;
    }

// Move
    void Move() 
    {
        rb.velocity = new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed);
    }


// Animate
    void Animate()
    {
        anim.SetFloat("AnimMoveX", moveDirection.x);
        anim.SetFloat("AnimMoveY", moveDirection.y);
        anim.SetFloat("AnimMoveMagnitude", moveDirection.magnitude);
        anim.SetFloat("AnimLastMoveX", lastMoveDirection.x);
        anim.SetFloat("AnimLastMoveY", lastMoveDirection.y);
    }


// Attack Coroutine
    private IEnumerator AttackCo()
    {
        anim.SetBool("Attacking", true);
        currentState = PlayerState.attack;
        yield return null;
        anim.SetBool("Attacking", false);
        yield return new WaitForSeconds(.3f);
        currentState = PlayerState.walk;
    }

}