- Home /
Shooting target to trigger a door to open
I have not found any answers on here to help me out so I just thought I would ask. Hopefully I am not repeating a question with an answer already, I just haven't found it.
I have a door that needs to be opened after you shoot 3 targets. I have an inventory that keeps track of doors hit, and when you shoot the target it is destroyed and adds 1 to the inventory. I am trying to make it so once the inventory is at 3, the door will open. I already have a working door script so there is no problem on that, so I am just using print("Door is opening!"); to let me know everything is working properly.
//This script is used to open a door when the three targets are hit
function update ()
{
if(GameManager.targetsHit == 3)
{
print("Door Opening!");
}
}
//Im using print right now just to know if this is working correctly. Right now if I shoot all the targets, it doesn't print.
// This script keeps track of stats, inventory, etc...
static var greenKey: int = 0;
static var targetsHit: int = 0;
//This script destroys the game object when trigger object is hit
function OnTriggerEnter ( other: Collider )
{
Destroy(gameObject);
GameManager.targetsHit ++;
print("Target Hit!");
}
As of right now, the targets get destroyed and the print comes up and says that the target was hit. So it should be adding to the inventory, and the door should open once it reaches 3. . . but it is not. Please help. Thank you in advance!
Answer by · Oct 27, 2010 at 03:39 AM
Your problem lies with:
function update ()
Code is case-sensitive ... it needs to be:
function Update ()
To be honest, I would recommend considering a change to how you're checking if the number of targets have been hit. Checking every frame until the 'targetsHit == 3' means unnecessary inefficiencies. It will also print the message every frame, and continue to check targetsHit even after it counts past 3.
I would personally suggest checking it just after you increment the count.
function OnTriggerEnter ( other: Collider )
{
Destroy(gameObject);
GameManager.targetsHit ++;
print("Target Hit!");
if ( GameManager.targetsHit == 3 )
{
// open the door here;
}
}
Oh man I didnt even think of that. I changed it, yet it still does not print that the door is opening. Am I doing this the wrong way?
If you have it in function Update() and it's not printing, then either targetsHit isn't equal to 3, the script isn't enabled, or the script isn't attached to a GameObject.
I just tried that, and it still doesn't work. BUT in a way it does... cause when I shoot and destroy all the targets, it alerts me that the target is hit at the bottom, and thats all I see. "Target Hit!" BUT when i go into the console alert thing, It says three "Target Hit!" then it says "Door Opening!" then it is followed by three more target hit's...
Well I got it working so that once you shoot all three targets it prints door opening. But there is still a problem, I found out that every time I destroy 1 target, it prints target hit twice, so it is counting each target as 2... so I increased the targetsHit == 6 and it works. No idea why it is counting each as 2 though.
I suspect that the same may have been true when you tried it in Update(). Is "Target Hit!" being printed anywhere else in your code? If not, then perhaps you could add "Debug.Log(other.gameObject.name)" to OnTriggerEnter, to see which objects are entering the trigger.
Your answer
Follow this Question
Related Questions
Open/Close Door Animation disables collider 1 Answer
Open/close door, lags if I walk into it. 0 Answers
Activate object with key 1 Answer
Help with making his work with a key 1 Answer