The prefabs stop instantiating after some time.
I have a script attached to an empty game object, that instantiates random car prefabs after waiting for 2 seconds. This script works fine, but after some time it stops instantiating the prefabs. It either stops after instantiating 36 objects or 72. Here is the code:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CarMovement : MonoBehaviour {
public GameObject audi;
public GameObject black_viper;
public GameObject car;
public GameObject mini_truck;
public GameObject mini_van;
public GameObject taxi;
public GameObject RandomCar;
private List<GameObject> prefabList = new List<GameObject>();
private int direction;
private int vehicle;
private Vector3 InstantiatingToNorth;
private Vector3 InstantiatingToSouth;
private Vector3 InstantiatingToLeft;
private Vector3 InstantiatingToRight;
private bool isInstantiating;
private float InstantiateInterval;
void Start () {
isInstantiating = false;
InstantiateInterval = 2.0f;
prefabList.Add(audi);
prefabList.Add(black_viper);
prefabList.Add(taxi);
prefabList.Add(car);
prefabList.Add(mini_van);
prefabList.Add(mini_truck);
InstantiatingToNorth = new Vector3(1, 8, -1);
InstantiatingToSouth = new Vector3(-1, -8, -1);
InstantiatingToLeft = new Vector3(-10, 1, -1);
InstantiatingToRight = new Vector3(10, -1, -1);
}
void FixedUpdate () {
if(isInstantiating == false){
InstantiateVehicle();
}
}
void InstantiateVehicle(){
isInstantiating = true;
direction = Random.Range(0, 4);
vehicle = Random.Range (0, 5);
if (direction == 0){
//Instantiate to north
RandomCar = Instantiate(prefabList[vehicle], InstantiatingToNorth, Quaternion.Euler(0, 0, 180)) as GameObject;
RandomCar.tag = "north";
RandomCar.AddComponent("VehicleTranslation");
} else if (direction == 1){
//Instantiate to south
RandomCar = Instantiate(prefabList[vehicle], InstantiatingToSouth, Quaternion.Euler(0, 0, 0)) as GameObject;
RandomCar.tag = "south";
RandomCar.AddComponent("VehicleTranslation");
} else if (direction == 2){
//Instantiate to left
RandomCar = Instantiate(prefabList[vehicle], InstantiatingToLeft, Quaternion.Euler(0, 0, 270)) as GameObject;
RandomCar.tag = "left";
RandomCar.AddComponent("VehicleTranslation");
} else if (direction == 3){
//Instantiate to right
RandomCar = Instantiate(prefabList[vehicle], InstantiatingToRight, Quaternion.Euler(0, 0, 90)) as GameObject;
RandomCar.tag = "right";
RandomCar.AddComponent("VehicleTranslation");
}
if (InstantiateInterval > 1.0f){
StartCoroutine(WaitFor(InstantiateInterval));
InstantiateInterval -= (InstantiateInterval * Time.deltaTime);
} else {
InstantiateInterval = 1.0f;
}
}
IEnumerator WaitFor(float duration){
yield return new WaitForSeconds(duration);
isInstantiating = false;
}
}
The script attached to each object, also destroys the object after the car has reached or passed that coordinate. Any help with this will be helpful.
Answer by hexagonius · Jan 15, 2016 at 12:15 PM
when line 93 is reached, nothing will set isInstantiating to false anymore. You should run the coroutine in both cases (outside the if)
Your answer
Follow this Question
Related Questions
Instantiate more than 1 prefab 0 Answers
ExecuteInEditMode is not working when trying to instantiate a new GameObject [SOLVED] 1 Answer
Prefabs not turning blue and losing connection 6 Answers
Any other ways for instantiated prefabs to reference game-objects in the scene? 0 Answers
Create gameobject in other scene... 0 Answers