- Home /
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
Answer by fafase · Feb 10, 2015 at 05:05 AM
private bool hasCollide = false;
void OnTriggerEnter (Collider other) {
if (other.gameObject.tag == "Enemy") {
if(hasCollide == false){
hasCollide = true;
other.gameObject.GetComponent<EnemyHealth>().TakeDamage(WeaponDamage);
}
}
}
Then you reset hasCollide either in the LateUpdate or after a certain time via a coroutine.
Thanks for the reply, i went with this answer and use time to reset hasCollide :)
Answer by Meltdown · Feb 10, 2015 at 05:09 AM
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;
}
Answer by team_eden · Feb 10, 2015 at 05:11 AM
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
Your answer
Follow this Question
Related Questions
Problem with trigger collider and damage function not hitting on the same frame 1 Answer
Multiple Cars not working 1 Answer
Problem with OnTriggerExit 1 Answer
Collision reaction not working 2 Answers