OnTriggerEnter/Exit?

Hey guys, I’m trying to make a detection switch if an enemy rolls over a collision box. I just need it to toggle a switch. Right now here’s what I have;

var alerted :   boolean = false;


function OnTriggerEnter ( other : Collider )
{
	if ( other.gameObject.tag == "alien" )
	{
		alerted = true;
	}
	else
	{
		alerted = false;
	}
}

Now it toggles the switch to “on” alright, but if the alien moves off the trigger or is destroyed, the switch will not shut off. Am I missing something here?

I’ve also tried;

var alerted :   boolean = false;


function OnTriggerEnter ( other : Collider )
{
	if ( other.gameObject.tag == "alien" )
	{
		alerted = true;
	}
}

function OnTriggerExit ( other : Collider )
{
    if ( other.gameObject.tag == "alien" )
	{
		alerted = false;
	}
}

both methods had the same result, so I’m clearly missing something here. Thanks for the help!

the code posted in the second box works

test steps:

  • created unityScript file pasted code (adding Debug.Log("alerted" + alerted); into the Update function)
  • create a 10x10x10 cube changed its collider to a trigger and added script
  • created 1x1x1 cube gave it the “alien” tag, and a RigidBody (ignoring gravity)
  • manually moved the cube into and out of the trigger

using this test while the cube was inside the trigger the alerted variable was true, and when outside of the trigger the variable was false. if the cube was disabled while inside the variable stayed true.

your only edge case would be if the object disappeared inside (OnTriggerEnter only detects the first frame of collision, and OnTriggerExit only detects the frame after the collision has ended)

immediate solution I would suggest checking to see what all in your scene has this tag “alien” to make sure that nothing else is entering this zone.

suggested solution going forward switch to OnTriggerStay, and create an ArrayList. every frame in Update clear the list, and then in OnTriggerStay add the object to the list. if there is anything in the list then alerted = true }else{ alerted = false }