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
![](https://koobas.hobune.stream/wayback/20220612060304im_/https://answers.unity.com/themes/thub/images/avi.jpg)
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