- Home /
Why does this co-routine not function properly after re-entering the scene?
The following co-routine functions perfectly after pressing play in the editor or launching the compiled program. However, if a new scene is loaded, when the original scene is eventually loaded again the coroutine will not execute. I have tested this with and without recursion and I have also made the method void and used InvokeRepeating. All methods work originally, but not after leaving and coming back to the scene. EDIT: OnMouseDown was added for testing, just fyi.
void Start ()
{
count = 0;
if(!PlayerPrefs.HasKey("HighScore"))
PlayerPrefs.SetInt("HighScore",0);
scoreDisplay.text = ""+PlayerPrefs.GetInt ("HighScore");
StartCoroutine ("spawnApples");
}
void OnMouseDown()
{
count = 0;
StartCoroutine ("spawnApples");
print ("MouseDown");
}
IEnumerator spawnApples()
{
float xPos = (float)System.Math.Round(Random.Range (-3.0f, 3.0f),1);
float zPos = (float)System.Math.Round(Random.Range (1.6f, 4.6f),1);
Vector3 spawnPos = new Vector3 (xPos, 14.0f, zPos);
GameObject newApple = Instantiate (apple, spawnPos, Quaternion.identity) as GameObject;
newApple.renderer.material.color=new Color(Random.Range(0.0f,1.0f),Random.Range(0.0f,1.0f),Random.Range(0.0f,1.0f));
count++;
yield return new WaitForSeconds(0.4f);
if(count < PlayerPrefs.GetInt("HighScore"))
{
StartCoroutine ("spawnApples");
}
}
After more testing, it seems that the question needs to be refined. It is not the co-routine failing, it is the apples failing to spawn. I tried this:
void On$$anonymous$$ouseDown()
{
float xPos = (float)System.$$anonymous$$ath.Round(Random.Range (-3.0f, 3.0f),1);
float zPos = (float)System.$$anonymous$$ath.Round(Random.Range (1.6f, 4.6f),1);
Vector3 spawnPos = new Vector3 (xPos, 14.0f, zPos);
GameObject newApple = Instantiate (apple, spawnPos, Quaternion.identity) as GameObject;
newApple.renderer.material.color=new Color(Random.Range(0.0f,1.0f),Random.Range(0.0f,1.0f),Random.Range(0.0f,1.0f));
}
and found that clicking worked fine on the initial scene load, but not after the scene was left and then reloaded. So I assume it has something to do with the Instantiate?
After moving the spawn position to within the camera's vision, I found that the spawned objects are simply frozen. Again, this only happens when the scene is reloaded, not when it is initially loaded. I did check whether they were sleeping or kinematic, and both returned false.