- Home /
Instantiate spawns 2 instead of 1, help?
var newBoat : Transform;
var dockboat = true;
function OnTriggerEnter (){
if(GameObject.FindWithTag("Player") && dockboat == true){
Destroy(GameObject.FindWithTag("Player"));
dockboat = false;
StartCoroutine("spawn");
}
}
function spawn () { Instantiate( newBoat, transform.position, transform.rotation); dockboat = false; StartCoroutine("trueagain", 1); }
function trueagain () { dockboat = true; }
I'm having trouble with this script. When I collide with the trigger I want to destroy my character and spawn a different one. Most of the time it spawns 2 characters in the same place at the same time, other times it just spawns one character. I have absolutely no idea why it is doing this. Is there an easy fix to this problem?
Answer by oliver-jones · Apr 05, 2011 at 01:38 PM
I believe its being caused by the 'StartCoroutines' that you have.
Try replacing them with a:
Invoke("spawn", 0);
and
Invoke("trueagain", 0);
Hint:
The '0' in the Invoke is if you would like a time delay to trigger the function, so if you have a: Invoke("spawn", 10); - then your spawn function will be called in 10 seconds.
Hope that helps.
Answer by Owen-Reynolds · Apr 06, 2011 at 08:14 PM
The basic problem seems to be that Instantiating the new boat is reTriggering the trigger box. In other words, new spawns can cause OnTriggerEnter. You've got the "flag" spawnBoat to prevent that.
The rest of the problem is likely that coroutines can run in any order. Sometimes it sets dockboat=false, spawns, resets it to true, then reruns OnTriggerEnter for the 2nd boat, with spawnBoat back to true.
Adding a Wait or yield command to TrueAgain would cause everything else to run first (with a false spawnBoat.) Likewise adding a delay to Invoke would do the same thing.
A comment: I don't think you could move the lines from spawn into OnTriggerEnter.
Your answer
Follow this Question
Related Questions
Resources.load loads twice ( onTriggerenter->load-another->destroy-self ) 1 Answer
Streaming Game Content 1 Answer
Solved: Destroy command not working 1 Answer
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Timetrail script creating 2 trails and not destroying the second 0 Answers