- Home /
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!
i performed the exact same test. And achieved the same results.
Answer by gardian06 · Jul 30, 2013 at 05:44 PM
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 }
Thanks to everyone who took the trouble to help me out here, I appreciate it greatly. I will indeed take those steps gardian06, thanks again!
Your answer
![](https://koobas.hobune.stream/wayback/20220613111138im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Trigger area around player. 1 Answer
OnTriggerEnter only working once. 0 Answers
OnTriggerEnter Question 0 Answers
OnTriggerExit overwrites OnTriggerEnter 2 Answers
OnTriggerExit happens too soon! 1 Answer