Preventing multiple collisions on same target

Ive implemented an attack for my game, the player swings his sword which has a box collider and uses OnTriggerEnter to detect collision with the enemy, the problem is the sword collides multiple times with the enemy in the same animation. Is there a way to prevent collision with enemy more than once each animation turn?

void OnTriggerEnter (Collider other) {
		if (other.gameObject.tag == "Enemy") {
			other.gameObject.GetComponent<EnemyHealth>().TakeDamage(WeaponDamage);		
		}
	}

this is the script for the weapon that detects collision

private bool hasCollide = false;
void OnTriggerEnter (Collider other) {
if (other.gameObject.tag == “Enemy”) {
if(hasCollide == false){
hasCollide = true;
other.gameObject.GetComponent().TakeDamage(WeaponDamage);
}
}
}

Then you reset hasCollide either in the LateUpdate or after a certain time via a coroutine.

Add a timer, so only 1 hit can happen every second…

float _hitTime = 1;
float _hitTimer = 0;
bool _canHit = true;

void Update()
{
    // Increment the hit timer
    _hitTimer += Time.deltaTime;   


  if(_hitTimer > _hitTime)
    _canHit = true;
  
}

void TakeDamage()
{
  // If can't be hit yet, return
  if(!_canHit)
    return;

  // Code here to apply damage

  // Reset the hit timer when taking damage
  _hitTimer = 0;
}

Once you initiate your attack sequence, wait for the first collision, then turn your sword collider off until the attack sequence completes. Then back on again. Also make sure you do not detect sword collisions while the attack sequence is not running. Probably do this by just keeping the sword collider off until you are actually attacking!

Good luck

You can also add the box collider to your animation. During the animation when you would assume the sword would hit; you can turn the box collider on and then back off which will cause it to only trigger once and no need for code :D.