How to repeat damage

Hello, I am asking this question only after searching for similar ones and not finding a solution to the problem.

I have written this simple script that applies damage to my player when it enters a trigger.

var damage = 1;

function OnTriggerEnter(other:Collider)
{
	if(other.gameObject.CompareTag("Player"))
	{
		other.gameObject.SendMessage("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
	}
}

This works perfectly but the player is only hurt once each time the trigger is hit, I would like the player to keep recieving damage over time while in the trigger until they leave it.

I have tried setting up a timer for this.

var damage = 1;
var damageTimer = 0.0;

function OnTriggerEnter(other:Collider)
{
	if(damageTimer==0.0)
	{
	if(other.gameObject.CompareTag("Player"))
	{
		damageTimer = Time.Time;
	}
	if((damageTimer+0.05) > Time.Time)
	{
		return;
	}
	else
	{
	other.gameObject.SendMessage("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
	damageTimer = Time.Time;
	}
}

This does not apply any damage at all and gives me a null reference exception but no other errors.

If someone could please point out to me what I have done wrong, it may be a simple solution but I just can’t see it.

Thank you for reading.

I believe you could simply use OnTriggerStay:

var damage = 1;

function OnTriggerStay(other:Collider)
{
    if(other.gameObject.CompareTag("Player"))
    {
       other.gameObject.SendMessage("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
    }
}

However this method would then add damage every frame and would therefore you would probably want a very small damage variable, as well as this the frame rate will vary so the damage/second will also vary

Alternatively I might use the InvokeRepeating command to do something like this:

var damage = 1;

function OnTriggerEnter(other:Collider){
	if(other.gameObject.CompareTag("Player")){
		InvokeRepeating("Damage" /*function name*/, 0 /*amount of time to wait before starting the function*/, 0.5 /*how often to apply damage in seconds*/);
	}
}

function OnTriggerExit(other:Collider){
	CancelInvoke("Damage");
}

function Damage () {
	other.gameObject.SendMessage("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}

That code is untested I’m afraid so forgive me if it doesn’t work straight off but you could play around with that idea.

Hope that helps,

Scribe