Variable goes into the negative even if I reset it when it goes below 0.

Hey guys,

I was adding a muzzle flash to my gun and found a weird problem, the light itself is just a point light. First of all, im using this function to time the muzzle flash so it only lights up when I fire my gun:

function WaitForMuzzle()
{
	if(muzzleTimer < 0)
	{
		muzzleFlash.enabled = false;
		muzzleTimer = 0.5;
	}
	
	else
	{
		muzzleTimer = muzzleTimer - 50.0 * Time.deltaTime;
	}
}

I call this function at the input of the left mouse button just like I do for my shooting function. As you can see in my if statement i set muzzleFlash back to 0.5, the thing is that when I have my inspector open the muzzleTimer variable is sometimes still in the negative which results to the muzzle flash not lighting up when shooting. How can I prevent this from happening?

Pretend muzzleTimer = 0.1…

It’s not less than 0 so the muzzleTimer < 0 condition is false, so your else gets executed.

That subtracts 50 * Time.deltaTime. At 60fps that will subtract 0.83 from 0.1, resulting in -0.73.

You can deal with this by doing the subtraction first, then doing the negative check…

muzzleTimer -= 50 * Time.deltaTime;
if (muzzleTimer < 0)
{
  muzzleTimer = 0.5;
  muzzleFlash.enabled = false;
}

Also, you may want to do muzzleTimer <= 0 instead of < 0, since your 0.5 seconds has elapsed if muzzleTimer is 0. You’ll wait an extra frame if you’re just doing < 0.