Ai that applies damage in collision?

Hi, I need o make a script that will make an enemy apply damage when it collides with the player, and when the player's health reaches 0, reload the level. Here's my simple script :

Player Script :

var health = 50;

function ApplyDamage (damage : int) {
     health -= damage;

     if(health <= 0) {
         Die();
     }
}
function Die () {
   Application.LoadLevel (Application.loadedLevel); 
}

Enemy Script :

var damage = 10;

function OnCollisionEnter (col : Collision) {

col.gameObject.BroadCastMessage("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}

I think its a simple script, when i use it on some enemies, my FPS dropped like hell with about 10 enemies on my screen ( only happened while using scripts ), and doesn't damage my player however they collide... is there any problems in this script? Can anyone tell me whats the problem?

What could be happening is that your enemy objects are colliding at a constant rate (a very fast rate, at that. With other colliders in the area, perhaps?).

If this is true (and I'm assuming it's doing so every frame), then those 10 enemy objects are broadcasting a message every frame.

If this were on a mobile device, you'd probably never even get the chance to load that particular level hehe.

What you could do is:

  • To check if your enemy objects are sending the message even if they don't need to, you could put a Debug.Log("Collided with: " + col.gameObject.name) inside the OnCOllisionEnter function.
  • Try putting a condition inside the OnCollisionEnter function so that the enemy object would only broadcast that message everytime it collides with a specific object (e.g. the player object). If you need help with that, just say so.